Scheme 方案#=作为输出意味着什么?

Scheme 方案#=作为输出意味着什么?,scheme,hashtag,side-effects,Scheme,Hashtag,Side Effects,您好,我正在尝试学习该计划,我正在大学网站上制作一个示例: 这个例子大致如下: (定义circ’(a和b)) (设置cdr!(cdr circ)circ) 这是输出: =>#0=(a b.#0#) 我不明白这是什么意思。该代码将一个名为circ的变量定义为一个包含2个元素(a和b)的列表 设置cdr!将此列表的cdr[即(b’())]进行变异,并将其更改为circ(即(a b)) 所以我期望这里的输出是(a(ab)),但是我得到了这个奇怪的标签 我正在使用DRracketIDE,并将R5RS方

您好,我正在尝试学习该计划,我正在大学网站上制作一个示例:

这个例子大致如下:

(定义circ’(a和b))

(设置cdr!(cdr circ)circ)

这是输出:

=>#0=(a b.#0#)

我不明白这是什么意思。该代码将一个名为circ的变量定义为一个包含2个元素(a和b)的列表

设置cdr!将此列表的cdr[即(b’())]进行变异,并将其更改为circ(即(a b))

所以我期望这里的输出是(a(ab)),但是我得到了这个奇怪的标签

我正在使用DRracketIDE,并将R5RS方案设置为语言

这个标签是什么意思?它可能会创建一个指向自身的指针(指向circ的指针),在这种情况下,它会像某种无限循环之类的东西吗

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

(定义x’(a b))

(设置cdr!x'c)

x

=>(a.c);是输出吗

这很容易理解为set cdr!将(b’())替换为“c”,并在结尾处去掉“()”,这就是为什么我得到的是虚线对而不是列表。但这与前面的例子不一致


不管怎样,如果有人想告诉我,请告诉我。提前感谢。

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

通过cons单元格绘制列表,这是定义后的情况:

这就是设置cdr后的情况


请注意,修改发生在
circ
的cdr的cdr上(第二个单元的cdr也是如此)。lisp语言中的符号
#0=(AB.#0#)
描述了一个不正确的列表,其中最后一个cdr等于该列表本身,产生了一个循环数据结构(即带有“循环”的数据结构)。

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

通过cons单元格绘制列表,这是定义后的情况:

这就是设置cdr后的情况


请注意,修改发生在
circ
的cdr的cdr上(第二个单元的cdr也是如此)。lisp语言中的符号
#0=(AB.#0#)
描述了一个不正确的列表,其中最后一个cdr等于该列表本身,产生了一个循环数据结构(即带有“循环”的数据结构)。

谢谢。我猜我也从这个(和其他例子)中想到了,当被计算的符号没有像字符串或数字那样的打印表示时,Scheme将输出什么。啊,这比我想象的更有用,因为我通常不知道列表的每个元素都是一个有2个值的cons单元格。第一个是实际值,第二个是到下一个cons单元格的链接。我想这应该是显而易见的,但当我看到你张贴的这些图纸时,它就沉沦了,这就是为什么我无法理解到底发生了什么。因此列表的尾部是一个cons单元格,其值为car,而不是link,它使用null或'()空列表符号作为cdr。我认为列表中的每个元素都是一个值。再次感谢,谢谢。我猜我也从这个(和其他例子)中想到了,当被计算的符号没有像字符串或数字那样的打印表示时,Scheme将输出什么。啊,这比我想象的更有用,因为我通常不知道列表的每个元素都是一个有2个值的cons单元格。第一个是实际值,第二个是到下一个cons单元格的链接。我想这应该是显而易见的,但当我看到你张贴的这些图纸时,它就沉沦了,这就是为什么我无法理解到底发生了什么。因此列表的尾部是一个cons单元格,其值为car,而不是link,它使用null或'()空列表符号作为cdr。我认为列表中的每个元素都是一个值。再次感谢。