在嵌套列表中查找元素?(方案)

use*_*945 0 scheme list

我正在尝试编写一个非常简单的过程来检查任意值是否是嵌套列表的元素。例如,如果列表是 this (8 (4 (3 () ()) (2 () ())) (5 (13 () ()) (28 () ())))),我们要检查数字6是否是该列表的一部分,如果不是,则返回 #f,如果是,则返回 #t,我们将如何做?我们不能简单地 cdr 向下列表,因为我们只会检索下一个列表,而不是下一个列表中的元素。我可能正在考虑使用过滤器,但不确定这是否是该过程的最佳方向。

rex*_*123 5

以下应该工作

  (define (find-elem l e)
    (cond [(empty? l) #f]
          [(equal? (first l) e) #t]
          [(list? (first l)) (or (find-elem (first l) e) (find-elem (rest l)e))]
          [else (find-elem (rest l) e)]))
Run Code Online (Sandbox Code Playgroud)

如果你是用来carcdr比你有更换firstcarrest通过cdr