[英]Cons cells pointing to the same other cons
你想創建一個A和B的cons
:
(cons 'A 'B)
然后你想從另一個缺點引用它兩次。 因此,如果x
是對現有cons
的引用,則需要
(cons x x)
結束,我們得到
(let ((x (cons 'A 'B)) (cons x x))
或者等價的
((lambda (x) (cons x x)) (cons 'A 'B))
如果你做兩次(cons 'A 'B)
你會創建兩個單元格:
一個 B.
一個 B.
這些的cons
將包含一個鏈接到第一個,另一個鏈接到第二個。
(使用lambda
來引用它們是一種毫無意義的混淆;具有lambda
形式的示例的要點是你使用x
兩次。
((lambda (x y) (cons x y)) (cons 'A 'B) (cons 'A 'B))
寫作只是一種非常乏味的方式
(cons (cons 'A 'B) (cons 'A 'B))
而在最初的例子中,只有一個(cons 'A 'B)
實例,你希望它能夠引用兩次。)
本練習的目的是說明“表面”對等與身份之間的區別。 包含相同值的兩個列表仍然是兩個不同的列表,而對同一列表的兩個引用是相同的。 正如@sde提示的那樣,這對理解比較有所幫助; 原型的例子是, equal
為含有相同的值不同的列表真(以及相同列表,當然),而eql
是僅當它的參數實際上是相同的真(即,它們是指相同的對象)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.