1

我有一个惰性列表界面,我正在尝试使用它来构建一个给定列表的子集的惰性列表。

界面:

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

我该如何进行?

4

0 回答 0