【发布时间】:2013-10-23 07:05:36
【问题描述】:
在 Petite Chez Scheme(线程)中。我定义了两个名为 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的车!
【问题讨论】:
-
不完全重复,但请注意修改文字(例如,引用)数据通常不是一个好主意:Unexpected persistence of data
标签: scheme chez-scheme