コンポーネント 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 ()))