在 Petite Chez 计划(线程)中。我定义了两个名为 myq 和 myqq 的列表。
(define make-queue
(lambda ()
(let ((end (cons 'ignored '())))
(cons end end))))
(define myqq (make-queue))
(define myq '((ignored) ignored))
;this shows myq and myqq are equal
(display (equal? myqq myq))
(newline)
;test myqq
(display myqq)
(newline)
(set-car! (cdr myqq) 'b)
(display myqq)
(newline)
;test myq
(display myq)
(newline)
(set-car! (cdr myq) 'b)
(display myq)
(newline)
这是结果:
#t
((ignored) ignored)
((b) b)
((ignored) ignored)
((ignored) b)
我的问题是:作为
(display (equal? myqq myq))
显示 myq 和 myqq 相等。为什么执行相同的命令:
(set-car! (cdr myqq) 'b)
(set-car! (cdr myq) 'b)
导致不同的结果?另外,我不知道为什么(set-car! (cdr myqq) 'b)
会导致。((b) b)
我认为应该会导致((ignored) b)
,因为我们从来没有换过myqq的车!