Recursion 在列表中查找子列表

Recursion 在列表中查找子列表,recursion,scheme,racket,sublist,Recursion,Scheme,Racket,Sublist,我是一个真正的scheme新手,我正在尝试解决如何返回带有列表参数的所有子列表(即:(1 2(3 4 5)(6 7 8)9)应该返回两个列表(3 4 5)和(6 7 8)) 我知道我应该对列表的其余部分使用递归函数,但是我在生成我想要的结果时遇到了困难。以下是我写的: (define (find-sublists list) (cond ((null? list) #t)) (not (list? (first list))) (print (first list))

我是一个真正的scheme新手,我正在尝试解决如何返回带有列表参数的所有子列表(即:(1 2(3 4 5)(6 7 8)9)应该返回两个列表(3 4 5)和(6 7 8))

我知道我应该对列表的其余部分使用递归函数,但是我在生成我想要的结果时遇到了困难。以下是我写的:

(define (find-sublists list)
  (cond
   ((null? list) #t))
  (not
   (list? (first list)))
  (print (first list))
  (find-sublists (rest list)))
我试图在列表中搜索并输出列表中的任何内容,然后再次搜索,否则只需递归搜索列表的其余部分。然而,我不知道当条件满足时如何直接跳到最后一行


有人对我有什么建议吗?

首先,我假设这是一项家庭作业;如果我错了,请纠正我

接下来:在我看来,你对这个问题有一个重要的误解:它要求你返回两个列表,而不是打印它们

接下来,我将引导您了解设计配方。第一步是写下您正在使用的数据定义--我不太确定它在这里是什么,但可能是这样的:

;; a list-of-maybe-lists is either
;; - empty, or 
;; - (cons maybe-list list-of-maybe-lists)

;; a maybe-list is either
;; - a list, or
;; - something else
您的下一步是为您的程序写下合同和目的声明,然后写下一些测试用例


样板:请原谅我给了你很多小步骤,而不是答案;所有这些步骤的目的是让您能够自己钓鱼,而不是等待其他人为您钓鱼。

如果您只想过滤掉给定列表中的所有列表,请使用
过滤器

(filter list? '(1 2 (3 4 5) (6 7 8) 9))
或者您自己实现它:

(define (my-filter func lst)
  (cond ((null? lst) '())
        ((func (car lst))
         (cons (car lst) (my-filter func (cdr lst))))
        (else
         (my-filter func (cdr lst)))))
副本