兩個列表有什麼區別我是一個新手計劃。我只是對以下兩個列表的區別感到困惑。方案
(define a '(1 2))
(define a '(1 . 2))
我覺得等於B,但
(equal? a b)
返回#f的給我。 任何幫助將不勝感激。
兩個列表有什麼區別我是一個新手計劃。我只是對以下兩個列表的區別感到困惑。方案
(define a '(1 2))
(define a '(1 . 2))
我覺得等於B,但
(equal? a b)
返回#f的給我。 任何幫助將不勝感激。
兩者不一樣。第一個是正常列表。在帶點表示法它是這樣的:
(1 . (2 . nil))
一個正常的列表存儲數據在cons
細胞的car
和cdr
僅用於存儲指向下一個cons
小區列表,或無爲列表中的最後一個單元格。
你的a
定義只使用一個cons
池,以在cdr
的car
和2
1
。
如果你畫出來圖形,他們會是這樣的:
在Scheme和LISP中使用「點」符號來描述「不正確的列表」,那些不符合標準列表數據定義的列表。這個問題:
Functional Programming: what is an "improper list"?
...大概回答您的大多數問題。讓我知道這個帖子是否有答案。
祝你好運!
非常感謝。我只知道fp的另一個概念。 – lujb 2011-03-31 06:09:05
,因爲他們是不相同的數據類型,他們不返回相等。第一個:(define a '(1 . 2))
就是所謂的一對。列表是一對,但不是所有對都是列表。列表是具有car
的對,它們的cdr
是列表。當您得到點符號時,這意味着該對的car
爲1,而cdr
爲2.因爲它們不是相同的數據類型,所以它們不能相等。
謝謝你的確定圖表,這就是我想要的。 – lujb 2011-03-31 06:05:55