我有这个功能:
(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)
答案 0 :(得分:0)
好的,你想要
(define (tails xs) (unfold foo xs))
为此您需要定义适当的foo
。现在,foo
应该做什么?它应该返回一对,其第一个组件成为结果列表的car
,其中第二个组件成为递归调用的种子 - 除非展开停止,foo
应该返回一个空列表。所以
(define (foo xs)
(if (stop-condition)
'()
(cons car-of-result next-seed)))
填写剩余的细节留给读者练习。