【发布时间】:2014-04-23 14:45:12
【问题描述】:
我定义了一个从零开始的所有整数的简单惰性列表:
(define integers-from
(lambda (n)
(cons n
(lambda () (integers-from (+ 1 n))))))
(define lz (integers-from 0))
我还编写了一个累加器,它获取一个惰性列表作为参数
(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)))))))
这个累加器能回答惰性列表的格式吗? 下面是对累加器的简单测试:
(define acc (lz-lst-accumulate * 1 lz))
(take acc 4)
=> '(1 2 6 24)
take 是一个辅助函数,它从惰性列表的第一个 n 元素创建一个列表:
(define head car)
(define tail
(lambda (lz-lst)
((cdr lz-lst)) ))
(define take
(lambda (lz-lst n)
(if (= n 0)
(list)
(cons (car lz-lst)
(take (tail lz-lst) (sub1 n)))) ))
【问题讨论】:
-
请添加您对
head、tail和take的定义。 -
@uselpa 我添加了定义
标签: scheme racket lazy-evaluation