有没有一种方法可以在lisp或scheme中构建自引用数据结构(比如带圈的图)?我以前从来没有想过它,但由于缺乏进行破坏性修改的方法,我找不到简单的方法来制作一个。这只是函数式语言的一个本质缺陷吗?如果是这样,那么像haskell这样的懒惰函数式语言又如何呢?
发布于 2009-03-03 03:35:52
在Scheme中,您可以轻松地使用set!
、set-car!
和set-cdr!
(以及任何其他以bang ('!'
)结尾的内容,表示修改):
(let ((x '(1 2 3)))
(set-car! x x)
; x is now the list (x 2 3), with the first element referring to itself
)
发布于 2009-03-03 04:05:16
Common Lisp支持使用setf
修改数据结构。
您可以通过tying the knot在Haskell中构建循环数据结构。
发布于 2009-03-03 18:30:52
是的,它们可以是有用的。我的一位大学教授创建了一种名为Medusa Numbers的Scheme类型。它们是任意精度的浮点数,可以包含重复的小数。他有一个功能:
(create-medusa numerator denominator) ; or some such
它创造了代表理性的美杜莎数字。结果是:
(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!
https://stackoverflow.com/questions/604988
复制相似问题