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

(define my-pair (cons 1 1))
(set-car! my-pair my-pair)


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

最佳答案

您可以使用闭包来创建一个惰性列表:

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

> ones
'(1 . #<procedure>)
> ((cdr ones))
'(1 . #<procedure>)


身份检查验证圆度:

> (eq? ones ((cdr ones)))
#t

10-04 14:22