是否可以在Scheme中创建一个没有变异的循环数据结构?

Ell*_*tus 2 scheme functional-programming reference-counting

我可以在Scheme中创建一个循环数据结构,如下所示:

(define my-pair (cons 1 1))
(set-car! my-pair my-pair)
Run Code Online (Sandbox Code Playgroud)

是否可以在Scheme中创建循环数据结构而不使用变异?(我正准备关于引用计数限制的讲座.)

mol*_*ilo 5

你可以创建一个带闭包的惰性列表:

; The infinite list (1 1 1 ...
(define ones
  (letrec ((x (cons 1 (lambda () x))))
    x))

> ones
'(1 . #<procedure>)
> ((cdr ones))
'(1 . #<procedure>)
Run Code Online (Sandbox Code Playgroud)

身份检查验证循环度:

> (eq? ones ((cdr ones)))
#t
Run Code Online (Sandbox Code Playgroud)