Scheme 方案#=作为输出意味着什么?
您好,我正在尝试学习该计划,我正在大学网站上制作一个示例: 这个例子大致如下: (定义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”,并在结尾处去掉“()”,这就是为什么我得到的是虚线对而不是列表。但这与前面的例子不一致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方
不管怎样,如果有人想告诉我,请告诉我。提前感谢。您认为操作是创建循环列表是正确的 通过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。我认为列表中的每个元素都是一个值。再次感谢。