Common Lispの系譜を継ぐ、マイコン上のuLispをラズパイPico2上で練習中。いつの御代からは知らねど、古来、問いかけ(述語、predicate)には末尾に p をつけるのだそうな。uLispとは言えども「なんちゃらピー」なる関数は大量に存在します。今回はその主なものを触ってみる初回ということで。
※Lispと一緒 投稿順 index はこちら
※実機確認は Raspberry Pi Pico2で行ってます。
※使用させていただいとります uLisp のバージョンは 4.6b (Arm用)です。
※Common Lispとの動作比較のために使わせていただいている処理系は以下です。
SBCL 2.2.2 (SBCL = Steel Bank Common Lisp )
「なんちゃらピー」一族
一族のものどもはuLispでも十数個くらいあるみたいです。全て真偽を返す関数なので、結果が真であれば t、偽であれば nil を返してきます。そして「なんちゃら」部分に真偽を判定する命題?そのものが収まるので見れば分かる?ものどもばかりです。ホントか?
リストなのか?CONSなのか?シンボルなのか?
さて上記を判定するのは
-
- listp
- consp
- symbolp
の3種類の関数です。以下にCommon LispとuLispで上記3関数を処理した結果を掲げます。勿論、結果は全て一致しとります。
3つの関数の「態度の違い」が一番出ているのは、空リスト ‘()を食わせたときでないかと。'()はNILでもあり、NILの意味するところは「偽」でもあるわけですが、それに対する態度は微妙。listpは、Tを返してくるので ‘()は空であってもリストであると。しかし、conspはNILを返してくるのでCONSではないと。リストではあるのにCONSではないらしいです。さらにsymbolpはTを返してくるのでシンボルでもあると。リストでもありシンボルでもあり。Lisp素人老人は何が何やら。
プラス?マイナス?ゼロ?
さて、プラス、マイナス、ゼロくらいは素人老人にも腑に落ちるのでないかと。
-
- plusp
- minusp
- zerop
奇数か偶数か?
以下の2関数です。
-
- oddp
- evenp
流石にこの辺は素人老人でも間違わないか。ホントか?