Common Lisp勉強中・・・ (2)
今日は, 本で言う第3章, リストとデータと関数.
本は, やさしいLisp入門.
リスト.
- 含める各データは, 空白やタブ, 改行で区切って並べる.
- 括られたデータ1つ1つをリストの要素と言う.
コンス.
- 要素の1つ1つを結びつける基本構造.
- 2つのデータの組みで構成される.
- 要素の実体が存在する位置.
- 次の要素に対応するコンスが存在する位置.
- リストの最後に対応するコンスは, 組になっている2番目のデータにnilが格納される.
シングルクォート(')
- シンボルやリストの先頭につけて, それがデータであることを明示的に示す.
- 「'」のつかないリストは, 基本的に関数.
- 空リスト()が例外.
- 数値や文字列もそれ以外のものには成り得ないので, 「'」を省略できる.
シャープ(#)
- 次のデータを列挙する際に使用.
- 文字データ.
- 複素数.
- 配列.
- 構造体.
- 関数データ.
ドットリスト.
- リスト中にピリオドを付けて表現したリスト.
ドットリストは, car部とcdr部を明示的に指定するってことなのかな.
こいつが3になることをもう1回考えてみた.
(length '(x . '()))
ふと思って, 2番目, 3番目の要素を見てみた.
(second '(x . '())) QUOTE (third '(x . '())) NIL (length '(x . (quote . ()))) 2 (length '(x . (quote ()))) 3 (length '(x . (quote . (nil . nil)))) 3
これから考えるに, こういうことか?
------ ------ -------- | | -|--->| | -|--->| | nil | ------ ------ -------- | | | v v v x quote nil
なんか「'()」これややこしい.
あっつぎのページみたら, listなんてのがあった.
(list '(x . '())) ((X QUOTE NIL))
そうっぽいなあ.
(なんかやってることまとまってない気がする.)
あー, nilがシンボルでリストっていう意味が分かった気がする.