まず、 car について。 これは、リストの先頭要素を取って来るリストです。
> (define sample (list 0 1 2)) ; sample == (0 1 2) > sample (0 1 2) > (car sample) ; sample の第一要素は0 0 > (car (list 'a 'b)) ; (a b) というリストの第一要素は a a次に、 cdr 。これは、先頭要素を取り除いたリストを 返します。
> (cdr sample) ; sample の cdr は (1 2) (1 2) > (cdr (cdr sample)) ; そのまた cdr は (2) (2) > (cdr (cdr (cdr sample))) ; そのまた cdr は () () > (cdr (cdr (cdr (cdr sample)))) ; そのまた cdr をすると、() に cdr はないと怒られる cdr: expects argument of type <pair>; given () > (car (cdr sample)) 1そして、 cons は、リストの頭に要素を付け加える操作です。 ちょうど、 car, cdr と逆の操作になります。
> (cons -1 sample) ; 先頭に -1 をつけてみる (-1 0 1 2) > (cons (car sample) (cdr sample)) ; car 要素と cdr 要素を cons でつなぐ。 (0 1 2)
99.10.5/ Tomio KAMADA: kamada@cs.kobe-u.ac.jp