方案

2011-03-31 46 views
2

兩個列表有什麼區別我是一個新手計劃。我只是對以下兩個列表的區別感到困惑。方案

(define a '(1 2)) 
(define a '(1 . 2)) 

我覺得等於B,但

(equal? a b) 

返回#f的給我。 任何幫助將不勝感激。

回答

4

兩者不一樣。第一個是正常列表。在帶點表示法它是這樣的:

(1 . (2 . nil)) 

一個正常的列表存儲數據在cons細胞的carcdr僅用於存儲指向下一個cons小區列表,或無爲列表中的最後一個單元格。

你的a定義只使用一個cons池,以在cdrcar21

如果你畫出來圖形,他們會是這樣的:

enter image description here

+0

謝謝你的確定圖表,這就是我想要的。 – lujb 2011-03-31 06:05:55

1

在Scheme和LISP中使用「點」符號來描述「不正確的列表」,那些不符合標準列表數據定義的列表。這個問題:

Functional Programming: what is an "improper list"?

...大概回答您的大多數問題。讓我知道這個帖子是否有答案。

祝你好運!

+0

非常感謝。我只知道fp的另一個概念。 – lujb 2011-03-31 06:09:05

0

,因爲他們是不相同的數據類型,他們不返回相等。第一個:(define a '(1 . 2))就是所謂的一對。列表是一對,但不是所有對都是列表。列表是具有car的對,它們的cdr是列表。當您得到點符號時,這意味着該對的car爲1,而cdr爲2.因爲它們不是相同的數據類型,所以它們不能相等。