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がシンボルでリストっていう意味が分かった気がする.