Common Lispの系譜を継ぐマイコン上のuLispをラズパイPico2上で練習中。今回は巡り巡ってリスト関係の関数に戻ってまいりました。uLispは「マイクロ」なので関数の数は少ないですが、この辺の関数どもの挙動にはCommon LispとuLispの差は見えませぬ。あったら困るか?さっさと練習して次へ。
※Lispと一緒 投稿順 index はこちら
※実機確認は Raspberry Pi Pico2で行ってます。
※使用させていただいとります uLisp のバージョンは 4.6b (Arm用)です。
※uLispとCommon Lispとの動作比較のために使わせていただいている処理系は以下です。
SBCL 2.2.2 (SBCL = Steel Bank Common Lisp )
リスト関連の関数
今回練習してみるのは以下の関数どもです。
-
- list、リストを生成する。
- length、リストの長さを求める。
- reverse、リストの順序を反転する。
- nth、リストのN番目(0から数えて)の要素を返す。
- append、リストを連結する。
- assoc、Aリスト(アソシエーション・リスト)から一致を見つける。
- member、リストから一致するメンバを見つける。
list、length、reverse、nth
リストを作って、変数L0に格納した後、lengthでリストの長さを reverseで順序反転したリストを、nthでリストの1番目(0から数えるので2番目)の要素をそれぞれ求めてみてます。また、setfを使ってリストL0の先頭要素をを別なリストで書き替えてみてます。
append、ついでにcons
appendのついでに、既にやっているけど cons。そして前の例でsetfしているので、こちらは、毎度お世話になっておりますsetq。まずはCommon Lisp上での動作確認。
assocとmember
今回は挙動に差もなく平穏無事。しかし、次回はそうもいかない予定。