コンスセルをつなげたらリストになりました。

カントリーマアムというお菓子が大好きなのですが、バニラとチョコのどちらを先に食べるか迷ってしまいます。30分ほど迷った結果、バニラを先に食べました。人は、ハイリスクハイリターンよりも、ローリスクローリターンの方を選択するそうです。ということは、カントリーマアムのチョコはハイリスクなのです。気を付けなはれや!!


今回は、コンスセルについてお話しします。コンスセルは、リストを構成する1単位です。(cons 2 3)を実行すると、(2 . 3)と表示されます。cons関数でコンスセルが作られたのです。consはconstructのことです。このコンスセルを図にすると、下のようになります。



この書き方を、「箱とポインタ記法」と言います。前回の勉強会で、メモリ上もこのように格納されているのか?コンスセルの概念を示すためだけのものか?と質問したところ、ほとんどの処理系でメモリ上もこのように格納されているのだそうです。


2つ並んだ箱のうち、左側の箱をcar (Contents of the Address part of the Register)、右側の箱をcdr (Contents of the Decrement part of the Register)と言います。覚えにくい場合は、「車(カー)が管(クダー)を引っ張ってる」のを想像してください。進行方向、左側です。




コンスセルをつなげてみましょう。(cons 1 (cons 2 3))とすると、(1 . (2 . 3))となりますね。実際には、省略されて(1 2 .3)と表示されます。これを図にしてみましょう。



いよいよ、リストです。コンスセルをつなげたものの最後を空リスト'()にします。(1 2 3 . '())ですね。これを省略して、(1 2 3)と書きます。図で見てみましょう。



これが、Schemeのリストです。また、コンスセルでないデータ、上の例では1, 2, 3などの数値を「アトム」と言います。文字列などもアトムです。かなり鉄腕です。


今回は以上です。分からないところは、コメント欄で質問してくださいね。私は答える自信がありませんが、9LISPのメンバーや通りすがりの人が答えてくれると思います。質問をすると言うのは、ローリスクハイリターンです。分からないところは、ガシガシ質問しましょう。ガシガシ。菓子菓子。カントリーマアム。