consを使ったリスト
consはドット対というリストを作るものである。ドット対とは( 値 . 参照先 )で成り立つリストである。
仮に( a . b )というドット対があった場合、aが値でbが参照先となる。
以下に例を示す。
(cons 'a 'b) ;; ( a . b ) ① (cons 'a '(b c)) ;; (a b c) ② (cons 'a (cons 'b (cons 'c nil)))と同じ (cons '(a b) '(b c)) ;; ((a b) b c) ③ (cons '(a c) 'b) ;; ((a c) . b) ④
①は前に説明したとおりでaが値で、bが参照先となっている。
②はaが値で、'(b c)ではなく'bが参照先となるため、(a b c)というリストになる。
③②と同様に'(a b)が値と見なされ、'(b c)ではなく'bが参照先となるため、((a b) b c)となる。
④②と同様に(ry
説明出来てるような出来てないような感じだけど、結局リストは見かけ上'(a b c)で配列っぽく見えるかもしれないが、きちんと( 値 . 参照先 )でつながってるって事を言いたかった。
まとめると、
(equal '(a b) '(a . (b . nil))) t
であり、(a b) 、( a . ( b . nil))は同じであることがわかる。