(define l '(a))
(define p (cons l l))
(set-car! (cdr p) 'b)
在上一次(set-car! (cdr p) 'b)
之后,p
将是((b) b)
而不是((a) b)
。为什么呢?
答案 0 :(得分:4)
cons
单元格实际上包含两个指针到另外两个对象。您的相关代码将大致转换为此伪C:
struct cons {
void *car;
void *cdr;
};
cons *l = &cons{"a", NULL};
cons *p = &cons{l, l}; // no copy takes place, we're handling pointers here
p->cdr->car = "b"; // this changes the "l" object, and nothing else