Lispと一緒(8) ラズパイPico2でもuLisp、「ピー」と問えば真偽が返る

Joseph Halfmoon

Common Lispの系譜を継ぐ、マイコン上のuLispをラズパイPico2上で練習中。いつの御代からは知らねど、古来、問いかけ(述語、predicate)には末尾に p をつけるのだそうな。uLispとは言えども「なんちゃらピー」なる関数は大量に存在します。今回はその主なものを触ってみる初回ということで。

※実機確認は Raspberry Pi Pico2で行ってます。

※使用させていただいとります uLisp のバージョンは 4.6b (Arm用)です。

※Common Lispとの動作比較のために使わせていただいている処理系は以下です。

SBCL 2.2.2  (SBCL =  Steel Bank Common Lisp )

「なんちゃらピー」一族

一族のものどもはuLispでも十数個くらいあるみたいです。全て真偽を返す関数なので、結果が真であれば t、偽であれば nil を返してきます。そして「なんちゃら」部分に真偽を判定する命題?そのものが収まるので見れば分かる?ものどもばかりです。ホントか?

リストなのか?CONSなのか?シンボルなのか?

さて上記を判定するのは

    1. listp
    2. consp
    3. symbolp

の3種類の関数です。以下にCommon LispとuLispで上記3関数を処理した結果を掲げます。勿論、結果は全て一致しとります。EC_list_cons_symbol

3つの関数の「態度の違い」が一番出ているのは、空リスト ‘()を食わせたときでないかと。'()はNILでもあり、NILの意味するところは「偽」でもあるわけですが、それに対する態度は微妙。listpは、Tを返してくるので ‘()は空であってもリストであると。しかし、conspはNILを返してくるのでCONSではないと。リストではあるのにCONSではないらしいです。さらにsymbolpはTを返してくるのでシンボルでもあると。リストでもありシンボルでもあり。Lisp素人老人は何が何やら。

プラス?マイナス?ゼロ?

さて、プラス、マイナス、ゼロくらいは素人老人にも腑に落ちるのでないかと。

    1. plusp
    2. minusp
    3. zerop

実行例が以下に。EC_plus_minus_zero

奇数か偶数か?

以下の2関数です。

    1. oddp
    2. evenp

例が以下に。EC_odd_even

流石にこの辺は素人老人でも間違わないか。ホントか?

Lispと一緒(7) ラズパイPico2でもuLisp、世界はCONSとATOMで出来ている へ戻る

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です