4

我对set-car!两个具有相同结构但构造不同的列表的应用结果感到困惑。

所以这是两个列表m和的代码示例n

(define m
  (cons
    (cons 'a '())
    (cons
      (cons 'a '())
      '())))
(display m)(newline) ; => ((a) (a))
(set-car! (cadr m) 'b)
(display m)(newline) ; => ((a) (b))

(newline)

(define n (list '(x) '(x)))
(display n)(newline) ; => ((x) (x))
(set-car! (cadr n) 'y)
(display n)(newline) ; => ((y) (y))

根据 do display,两个列表具有相同的结构,但为什么对它们应用相同的过程会导致不同的行为?这与它们的构造方式有关吗?

4

1 回答 1

-1

两个列表的结果应该相同。您使用的是什么方案解释器?在我看来,您的解释器重用了该'(x)表达式。

在评论之后,似乎实际上这是解释器中的一个错误。修改后两个列表的行为应该相同。

于 2012-09-08T17:28:37.133 回答