Scheme #= as output 是什么意思?

Scheme what does #= as output mean?

你好,我正在尝试学习 Scheme,我正在研究大学网站上的一个例子:

https://courses.cs.washington.edu/courses/cse341/05au/lectures/scheme-side-effects.html

示例大致如下:

(define 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 方案设置为语言。

这个话题标签是什么意思?它是否可能创建一个指向自身的指针(一个 [指向 circ 的指针]),在这种情况下它会像某种无限循环或其他东西?

我的意思是如果我这样做:

(define x '(a b))

(set-cdr! x 'c)

x

=>(a.c);是输出

这个简单理解为set-cdr!最后用 'c and getting rid of the '() 替换 (b '()) 就是为什么我得到一个点对而不是列表的原因。但这与前面的示例不一致。

无论如何,如果有人愿意告诉我,请告诉我。提前致谢。

你认为操作是创建循环列表是正确的。

通过cons cells绘制一个list,define后是这样的:

这是set-cdr!之后的情况:

注意修改是在circ的cdr的cdr上(所以在第二个cell的cdr上)。 lisp 语言中的符号 #0=(a b . #0#) 描述了一个不正确的列表,其中最后一个 cdr 等于列表本身,产生循环数据结构(即具有“循环”的数据结构)。