我可以在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