【发布时间】:2019-09-12 16:38:06
【问题描述】:
我正在用 guile 测试这段代码:
> (define xxx (let ((x '(1 2 3))) (set-cdr! (cddr x) x) x))
> xxx
它显示 (1 2 3)
但是这个:
(define x '(1 2 3))
(set-cdr! (cddr x) x)
x
=> (1 2 3 . #-2#)
创建循环列表
为什么第一个代码在 guile 中不起作用?如果您不了解 guile 我只是想知道它是否应该按照方案规范工作,不知道在哪里可以搜索这些东西。
【问题讨论】:
-
"它显示 (1 2 3)" - 不,它没有。它会引发错误:
In procedure set-cdr!: Wrong type argument in position 1 (expecting mutable pair): (3)。你用的是什么诡计版本? -
它们产生相同的循环结果,导致 Guile 2.0.13 here。不过,我相信 2.0 与任何 Scheme 标准都相去甚远。
-
这两种方案都不是有效的方案,因为您正在尝试修改常量引用的文字数据。因此,如果实现打印了
"BaNaNa",它仍然可以。
标签: scheme lisp circular-reference guile