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

Joseph Halfmoon

Common Lispの系譜を継ぐ、マイコン上のuLispをラズパイPico2上で練習中。どうも「世界はCONSとATOMで出来ている」らしいです。今回はデータの構造体であるCONSを作り出すCONS関数と、CONSなのかATOMなのかを判断するATOM関数を練習してみます。根幹ゆえCommon Lispと当然の一致。

※Lispと一緒 投稿順 index はこちら

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

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

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

SBCL 2.2.2  (SBCL =  Steel Bank Common Lisp )

CONSとATOM

前々回にSOBJECTなるものにちょいと触れましたが、CONSという構造体はSOBJECTを構成する共用体の「一面」です。左にCARポインタ、右にCDRポインタを持つ構造。ポインタ2つだけ。そしてATOMはSOBJECTの「もう一面」、どのようなデータなのか、整数なのか、何なのかを示した上で実データを格納。このCONSという構造を新たに1個作って返す関数がCONSです。また、オブジェクトがCONSなのかATOM(CONS以外)であるのか判定して真偽を返す関数がATOMです。

CONSの例題

さてまずはパソコン上の(Maxima様から呼び出して使っているSBCLデス)Common Lispでの動作確認。こんな感じ。SBCL_CONS

 

最初の例では、新たに作られたCONSセルのCAR部にはシンボルAへのポインタが入り、CDR部にはNILが入ります。なお'()はNILなので、2番目のように書いても同じ結果が得られると。3番目の例のようにCAR部にはシンボルAへのポインタを入れて、CDR部にはリスト(別なCONSセル)へのポインタを与えると、結果は連続したリストであると。一方、4番目の例のように、CAR部にシンボルAへのポインタ、CDR部にシンボルBへのポインタを入れると、「ドット」表現にて (A . B)となると。

さて上記と同じことを、ラズパイPico2のuLispにて行ってみます。uLisp_CONS

大文字、小文字の表記の違いはあるものの、結果は同じだと。当然でありますな。

ATOMの例題

パソコン上のCommon Lispでの動作確認が以下に。SBCL_ATOM

CONS以外はT(真)、CONSであればNIL(偽)であると。

ラズパイPico2のuLispでも同じ結果にならないわけないのだけれども一応確認。uLisp_ATOMにて行ってみます。

結果は同じ。良かった。あったりまえだが。

Lispと一緒(6) ラズパイPico2でもuLisp、EQとEQUALだけ? へ戻る

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