Lisp 在scheme中使用列表

Lisp 在scheme中使用列表,lisp,scheme,racket,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) 好吧,你想要什么 (define (tails

我有这个功能:

(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)
好吧,你想要什么

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

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

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

而且,它有什么问题吗?还有,
功能
展开
之间的关系是什么?我的展开没有问题!我想在定义函数时使用“展开”。可能的重复。再次,我不尝试实现“展开”函数,因为我已经完成了!我试图定义一个函数,它接受一个列表并返回一个列表列表,这样每个列表都会像上面那样删除第一个元素。(定义(所有后缀列表)(展开删除列表))(定义(删除列表)(if(null?列表)(列表)(cons(汽车列表)(cdr列表)))对<代码>cons(汽车列表)(cdr列表)通常只是
列表
,所以这不是您想要的。那么(cons(汽车列表)(删除(cdr列表))不是。在您的示例中,所需结果的第一个元素是什么?所需结果的第一个元素是原始lis