2009-06-04 154 views

回答

4

DrScheme不介意你cons -ing,因爲cons可以做的不僅僅是建立名單。從參考,

(cons a d) → pair? 
    a : any/c 
    d : any/c

這意味着cons建立配對。這也是完全合法的做

> (cons 1 2) 
(1 . 2) 

這不是一個名單,但仍然可以讓你做

> (car (cons 1 2)) 
1 
> (cdr (cons 1 2)) 
2 

但不管怎麼說,「空字」和「空列表」是同一個對象,可以通過檢查

> (eq? empty '()) 
#t 
1

最後一對的cdr指向'(),空列表。

+0

爲什麼(缺點是空的)工作? – unj2 2009-06-04 16:37:04

+1

所有列表均由一系列列表組成,每個列表的長度均爲2.例如,(1 2 3)實際上是長度爲2的列表:第一個項目爲1,第二個項目爲(2 3)。內部列表也是長度爲2的列表:第一個項目是2,第二個項目是(3)。第二個項目實際上也是兩個項目列表:第一個項目是3,第二個項目是()。因此,cons('a'())返回('a),因爲那實際上是('a。'())。 – 2009-06-04 16:45:26

1

如果您評估符號empty,可以找到您所有問題的答案。它被定義爲等於'(),空列表,這是最後一個cdr指向的內容。要說服自己,試試這個:

(cdr (list 1 2 3)) 
(cdr (cdr (list 1 2 3))) 
(cdr (cdr (cdr (list 1 2 3)))) 
相關問題