使用方案中的列表

时间:2012-02-15 10:43:20

标签: lisp scheme racket

我有这个功能:

(define (unfold f init)
  (if (eq? (f init) '())
    (list)
    (cons (car (f init)) (unfold f (cdr (f init))))))

我想用它来定义一个函数:

(hypothetical-function '(1 2 3 4 5))

应返回:

'((1 2 3 4 5) (2 3 4 5) (3 4 5) (4 5) (5)

1 个答案:

答案 0 :(得分:0)

好的,你想要

(define (tails xs) (unfold foo xs))

为此您需要定义适当的foo。现在,foo应该做什么?它应该返回一对,其第一个组件成为结果列表的car,其中第二个组件成为递归调用的种子 - 除非展开停止,foo应该返回一个空列表。所以

(define (foo xs)
    (if (stop-condition)
        '()
        (cons car-of-result next-seed)))

填写剩余的细节留给读者练习。