我正在练习2.57,但遇到了这样的问题 (a b(c))和(list'a'b(list'c))有什么区别,因为它们在方案解释器中看起来完全一样?
1 ]=> (eq? '(a b (c)) (list 'a 'b (list 'c)))
;Value: #f
1 ]=> '(a b (c))
;Value 2: (a b (c))
1 ]=> (list 'a 'b (list 'c))
;Value 3: (a b (c))
1 ]=>
答案 0 :(得分:1)
提示:(eq? (list 1) (list 1))
是什么?
eq?
仅测试对象 identity 。即使它们的内容相同,两个单独构造的列表也不是同一列表。使用equal?
来实现价值平等:
(equal? '(a b (c)) (list 'a 'b (list 'c)))
; => #t