先看z1,z1的car和cdr指向同一个对象x,所以当改变x的car时,z1的car、cdr都改变。
先看z2,z1的car和cdr指向的是两个对象x,所以当改变car的x值时,cdr的值不会改变。
#lang R5RS
(define (set-to-wow! x)
(set-car! (car x) 'wow)
x)
(define x (list 'a 'b))
(define z1 (cons x x))
(define z2 (cons (list 'a 'b) (list 'a 'b)))
(display z1)
(newline)
(set-to-wow! z1)
(display z1)
(newline)
(display z2)
(newline)
(set-to-wow! z2)
(display z2)
(newline)
输出结果
((a b) a b)
((wow b) wow b)
((a b) a b)
((wow b) a b)