[英]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.