Shammer's Philosophy

My private adversaria

コンスとは

Lisp は、関数もデータもすべて「リスト」として扱う。LISt Processing というのがLispの正式名称であるように、リストを処理するための言語がLispだ。では、Lispがリストを扱う際に、そのリストが内部的にどのようになっているのか?それは、2つのブロック構成になっている。

┌─┬─┐
└─┴─┘

左側が、そのリスト要素(この表現でいいのか?)の値、右側が次のリスト要素のポインタとなり、リストの最後尾はNILを参照する。この一塊を「コンス」というらしい。そして、リストの中の先頭コンスを返すのが「car関数」で、先頭を除いた要素を返すのが「cdr関数」である。
なぜこんな関数があるんだ?と思っていた2つの関数の使い道が見えてきた。リストを操作するときに、一番基本的なオペレーションになるだろう。リストの先頭要素に対して何か処理をして、後続要素にもその処理を続けたい、という場合は、car と cdr を使って再帰処理を行う、という感じかな。


・・・なんかLispっぽくなってきたか?と言っても、まだまだLispについて未熟であることは否定できないか。このままLispを学び続けて、将来この文章見るのが恥ずかしくなるかも・・・