'(a b(c))和(list'a'b(list'c))

时间:2018-11-19 08:53:41

标签: scheme sicp

我正在练习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 ]=>

1 个答案:

答案 0 :(得分:1)

提示:(eq? (list 1) (list 1))是什么?

eq?仅测试对象 identity 。即使它们的内容相同,两个单独构造的列表也不是同一列表。使用equal?来实现价值平等:

(equal? '(a b (c)) (list 'a 'b (list 'c)))
; => #t