5

コンポーネント 1、2、3、および () からコンスを使用してリスト ((1 2) 3) を作成するように求める、Scheme (DrRacket を使用) での割り当てが与えられました。

私は ((1 2) . 3) まで取得することができました:

(cons (cons '1 (cons '2 '())) '3)

しかし、それは同じことですか?

4

5 に答える 5

2

いいえ、他の人が述べたように、((1 2) 3)は と同じです。もちろん、リテラルの代わりに((1 2) 3 . ())使用して構築できます :(cons '3 '())'3

(cons (cons '1 (cons '2 '())) (cons '3 '()))
于 2013-10-07T14:05:03.750 に答える
1

それらは異なります:

(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不適切なリストになります。

于 2013-10-07T14:06:18.733 に答える
1

いいえ。

の「最上位」要素(A . B)は単一のconsセルです: (cons A B). carコンスセルの は でありAcdrは ですB。適切なリストでは、cdr要素は常にどちらか()または他の空でない適切なリストです。

対照的に、(A B)は 2 要素のリストで、要素ごとに 1 つのコンス セルがあります。(cons A (cons B ()))

于 2013-10-07T11:21:44.493 に答える