Scheme子集和惰性列表

时间:2018-06-18 11:03:23

标签: scheme racket lazylist

我有一个懒惰的列表界面,我试图用它来建立一个列表的懒惰列表。

界面:

(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))

我看到它的方式我有几个步骤:

  1. 检查列表是否为空 - 如果是,则返回构造的空惰性列表。
  2. 如果列表不为空,则返回带有car元素的惰性列表,并使用cdr元素再次调用all-subs。
  3. 我该怎么办?

0 个答案:

没有答案