consとlist
consは、与えられた引数を連結してリストを作る、と思っていたが、どうも少し違うようだ。
> (cons 'a 'b) (A . B) > (list 'a 'b) (A B) > (car (list 'a 'b)) A > (car (cons 'a 'b)) A > (cdr (list 'a 'b)) (B) > (cdr (cons 'a 'b)) B
(A.B)というドットリスト(?)ができてしまった。consで作成されるデータ(コンス)は、普通の(?)リストとは異なるようだ。carの結果は、consで作成されたものでもlistで作成されたものでも同じだが、cdrの結果は異なった。listは、cdrの結果もリストになる、ということ?
> (listp (cons 'a 'b)) T > (listp (cdr (cons 'a 'b))) NIL > (listp (list 'a 'b)) T > (listp (cdr (list 'a 'b))) T
どうやらそのようだ。データを連結する際には、consを使うかlistを使うかを気にしないといけない。前、appendを使ってドットリストになってしまったことがあったが。これと何か関係があるのだろうか。