コンポーネント 1、2、3、および () からコンスを使用してリスト ((1 2) 3) を作成するように求める、Scheme (DrRacket を使用) での割り当てが与えられました。
私は ((1 2) . 3) まで取得することができました:
(cons (cons '1 (cons '2 '())) '3)
しかし、それは同じことですか?
いいえ、他の人が述べたように、((1 2) 3)
は と同じです。もちろん、リテラルの代わりに((1 2) 3 . ())
使用して構築できます :(cons '3 '())
'3
(cons (cons '1 (cons '2 '())) (cons '3 '()))
それらは異なります:
(equal? '((1 2) 3) '((1 2) . 3))
=> #f
'((1 2) 3)
これと同等であるため:
(cons (cons 1 (cons 2 '())) (cons 3 '()))
一方、これ'((1 2) . 3)
と同等です:
(cons (cons 1 (cons 2 '())) 3)
ご覧のとおり、それらは異なるcons
細胞構造を持っています。最初のバージョンは適切なリストです。つまり、空のリスト'()
で終わりますが、2 番目のバージョンは で終わり3
、不適切なリストになります。
いいえ。
の「最上位」要素(A . B)
は単一のcons
セルです: (cons A B)
. car
コンスセルの は でありA
、cdr
は ですB
。適切なリストでは、cdr
要素は常にどちらか()
または他の空でない適切なリストです。
対照的に、(A B)
は 2 要素のリストで、要素ごとに 1 つのコンス セルがあります。(cons A (cons B ()))