我定义了一个从零开始的所有整数的简单惰性列表:
(define integers-from
(lambda (n)
(cons n
(lambda () (integers-from (+ 1 n))))))
(define lz (integers-from 0))
Run Code Online (Sandbox Code Playgroud)
我还编码了一个将惰性列表作为参数的累加器
(define lz-lst-accumulate
(lambda (op initial lz)
(if (null? lz)
initial
(cons (op (head lz) initial)
(lambda () (lz-lst-accumulate op (op initial (head lz)) (tail lz)))))))
Run Code Online (Sandbox Code Playgroud)
这个累加器会回答惰性列表的格式吗?这是对累加器的简单测试:
(define acc (lz-lst-accumulate * 1 lz))
(take acc 4)
=> '(1 2 6 24)
Run Code Online (Sandbox Code Playgroud)
take是一个帮助函数,它从n懒惰列表的前几个元素创建一个列表:
(define head car)
(define tail
(lambda (lz-lst)
((cdr lz-lst)) ))
(define take
(lambda (lz-lst n)
(if (= n …Run Code Online (Sandbox Code Playgroud)