首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Lisp/Scheme中的自引用数据结构

Lisp/Scheme中的自引用数据结构
EN

Stack Overflow用户
提问于 2009-03-03 03:25:06
回答 7查看 4.1K关注 0票数 18

有没有一种方法可以在lisp或scheme中构建自引用数据结构(比如带圈的图)?我以前从来没有想过它,但由于缺乏进行破坏性修改的方法,我找不到简单的方法来制作一个。这只是函数式语言的一个本质缺陷吗?如果是这样,那么像haskell这样的懒惰函数式语言又如何呢?

EN

回答 7

Stack Overflow用户

发布于 2009-03-03 03:35:52

在Scheme中,您可以轻松地使用set!set-car!set-cdr! (以及任何其他以bang ('!')结尾的内容,表示修改):

代码语言:javascript
复制
(let ((x '(1 2 3)))
  (set-car! x x)
  ; x is now the list (x 2 3), with the first element referring to itself
  )
票数 9
EN

Stack Overflow用户

发布于 2009-03-03 04:05:16

Common Lisp支持使用setf修改数据结构。

您可以通过tying the knot在Haskell中构建循环数据结构。

票数 9
EN

Stack Overflow用户

发布于 2009-03-03 18:30:52

是的,它们可以是有用的。我的一位大学教授创建了一种名为Medusa Numbers的Scheme类型。它们是任意精度的浮点数,可以包含重复的小数。他有一个功能:

代码语言:javascript
复制
(create-medusa numerator denominator) ; or some such

它创造了代表理性的美杜莎数字。结果是:

代码语言:javascript
复制
(define one-third (create-medusa 1 3))
one-third => ; scheme hangs - when you look at a medusa number you turn to stone
(add-medusa one-third (add-medusa one-third one-third)) => 1

如前所述,这是通过set-car的明智应用来完成的!和set-cdr!

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

https://stackoverflow.com/questions/604988

复制
相关文章

相似问题

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