【发布时间】:2016-11-04 15:05:16
【问题描述】:
您好,我正在尝试学习 Scheme,我正在研究大学网站上的一个示例:
https://courses.cs.washington.edu/courses/cse341/05au/lectures/scheme-side-effects.html
这个例子是这样的:
(定义 circ '(a b))
(set-cdr! (cdr circ) circ)
这是输出:
=> #0=(a b . #0#)
我不明白这是什么意思。该代码将名为 circ 的变量定义为具有 2 个元素 (a b) 的列表。
设置-cdr!改变此列表的 cdr [即 (b '())] 并将其更改为 circ (即 (a b))。
所以我在这里期望的输出是 (a (a b)) 但我得到了这个奇怪的标签。
我正在使用 DrRacket IDE,并将 R5RS 方案设置为语言。
这个标签是什么意思?是否可能创建一个指向自身的指针,例如(a [pointer to circ]),在这种情况下,它会像某种无限循环或其他东西?
我的意思是如果我这样做:
(定义 x '(a b))
(set-cdr!x 'c)
x
=>(a.c) ;是输出
这很容易理解为 set-cdr!用 'c 替换 (b '()) 并在最后去掉 '() 是为什么我得到一个点对而不是一个列表。但这不符合前面的例子。
无论如何,如果有人愿意填写我的信息,请告诉我。提前致谢。
【问题讨论】:
标签: scheme hashtag side-effects