2
(cons 1 2)
給我們(1 . 2)
。缺點在方案解釋
(cons 3 4)
給我們(3 . 4)
。
那麼爲什麼(cons (cons 1 2) (cons 3 4))
給我們((1 . 2) 3 . 4)
? 爲什麼不是((1 . 2) (3 . 4))
?
(cons 1 2)
給我們(1 . 2)
。缺點在方案解釋
(cons 3 4)
給我們(3 . 4)
。
那麼爲什麼(cons (cons 1 2) (cons 3 4))
給我們((1 . 2) 3 . 4)
? 爲什麼不是((1 . 2) (3 . 4))
?
那麼,它不會是((1 . 2) (3 . 4))
,因爲這將是一個包含兩個元素,每個cons對的列表。我猜你意思是是:爲什麼不是((1 . 2) . (3 . 4))
?
嗯,其實下面兩個表達式是相同的:
'((1 . 2) . (3 . 4))
'((1 . 2) 3 . 4)
這與計劃的點符號串聯如何與它應有的名單表示做。記住這一點:
'(1 . (2 . (3 . (4 .()))))
...只會被打印成這樣:
(1 2 3 4)
然而,這樣的:
'(1 . (2 . (3 . 4)))
......將打印:
(1 2 3 . 4)
請注意,Scheme試圖使用s只要它可以顯示列表符號 - 它只能回退到顯式點擊事物,一旦它到達一個沒有配對或空列表的對象作爲它的cdr
元素。
因此,在您的原始示例中,該缺點對的第二個元素是的一對,因此Scheme使用列表記法。這可以讓它刪除第二組圓括號和多餘的點,得出你遇到的結果。