我是用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,我只想知道它是否应该根据方案规范工作,不知道在哪里可以搜索到这样的东西。
发布于 2019-04-23 21:59:32
你的例子的问题是-它们不起作用。他们都不是。我不知道第一个是如何返回(1 2 3)的。但是,当您在两个示例中修复相同的问题时,它们会按预期工作并创建循环列表。
问题-
'(1 2 3)和(quote 1 2 3)是与(list 1 2 3)非常不同的东西。它们看起来都是一样的,但是第一个是静态列表,你不能修改它。只有使用with list函数(well和cons)创建的列表才是可以修改的列表。
修复
(define xxx
(let ((x (list 1 2 3)))
(set-cdr! (cddr x) x)
x))
xxx ;; => (1 2 3 . #-2#)第二个例子也是如此:
(define x (list 1 2 3))
(set-cdr! (cddr x) x)请在发帖前测试您的代码。
https://stackoverflow.com/questions/55812133
复制相似问题