2015-02-09 47 views
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))

回答

5

那麼,它不會是((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使用列表記法。這可以讓它刪除第二組圓括號和多餘的點,得出你遇到的結果。