首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >guile中的循环列表

guile中的循环列表
EN

Stack Overflow用户
提问于 2019-04-23 21:16:10
回答 1查看 168关注 0票数 0

我是用guile测试这段代码的:

代码语言:javascript
复制
> (define xxx  (let ((x '(1 2 3))) (set-cdr! (cddr x) x) x))
> xxx

它显示(%1%2% 3)

但这一点:

代码语言:javascript
复制
(define x '(1 2 3))
(set-cdr! (cddr x) x)
x
=> (1 2 3 . #-2#)

创建循环列表

为什么第一个代码不能在guile中工作?如果你不知道guile,我只想知道它是否应该根据方案规范工作,不知道在哪里可以搜索到这样的东西。

EN

回答 1

Stack Overflow用户

发布于 2019-04-23 21:59:32

你的例子的问题是-它们不起作用。他们都不是。我不知道第一个是如何返回(1 2 3)的。但是,当您在两个示例中修复相同的问题时,它们会按预期工作并创建循环列表。

问题-

'(1 2 3)(quote 1 2 3)是与(list 1 2 3)非常不同的东西。它们看起来都是一样的,但是第一个是静态列表,你不能修改它。只有使用with list函数(well和cons)创建的列表才是可以修改的列表。

修复

代码语言:javascript
复制
(define xxx
  (let ((x (list 1 2 3)))
    (set-cdr! (cddr x) x)
    x))

xxx ;; => (1 2 3 . #-2#)

第二个例子也是如此:

代码语言:javascript
复制
(define x (list 1 2 3))
(set-cdr! (cddr x) x)

请在发帖前测试您的代码。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55812133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档