我有一个懒惰的列表界面,我试图用它来建立一个列表的懒惰列表。
界面:
(define cons-lzl cons)
(define empty-lzl empty)
(define empty-lzl? empty?)
(define head car)
(define tail
(lambda (lz-lst)
((cdr lz-lst))))
目标是使用函数生成一个惰性列表,并使用take函数获取给定数量的子集(如果需要)。
我的拍摄功能:
(define take
(lambda (lz-lst n)
(if (or (= n 0) (empty-lzl? lz-lst))
empty-lzl
(cons (head lz-lst)
(take (tail lz-lst) (- n 1))))))
测试用例:
(take (all-subs '(1 2 3)) 8) ->
'(() (3) (2) (2 3) (1) (1 3) (1 2) (1 2 3))
我看到它的方式我有几个步骤:
我该怎么办?