我想实现一个惰性列表,它以 2 个数字作为参数:low & int。lambda 将返回所有大于 low 且可被 int 整除的整数的惰性列表。
例如:
> (define lz1 (div-from 5 12))
> (take lz1 3)
'(12 24 36)
我的实施尝试:
>(define gen_item
(lambda (n int)
(cons (cond ((= 0 (modulo n int)) n))
(lambda () (gen_item (+ n 1) int)))))
使用此实现时:
>(define take
(lambda (lz-lst n)
(if (= n 0)
(list)
(cons (car lz-lst)
(take (tail lz-lst) (sub1 n))))))
当我运行 lambda 时:
(取(gen_item 5 12)20)
返回值:
'(#<void> #<void> #<void> #<void> #<void>
#<void> #<void> 12 #<void> #<void>
#<void> #<void> #<void> #<void> #<void>
#<void> #<void> #<void> #<void> 24)
我怎样才能防止 lambda 返回#<void>
并且什么都不返回?
谢谢你。