从列表列表中选择一些列表

Selecting some lists from a list of lists

我想在特定条件下从列表列表中获得一些列表。例如:

`((a w) (e w))`

来自

`((a w) (e w) (i u) (o u))`

条件是'w 在第二个位置。

我的代码

(filter (andmap (equal? (cdr lst) 'w)) 'lst)

(define lst '((a w) (e w) (i u) (o u)))

不工作。我做错了什么?

您不应该引用列表:'lstlst 不同。要访问第二个元素,请使用 second(如果未定义,请改用 cadr)。使用 cdr,您将获得列表(这是另一个列表)的 rest,而不是它的第二个 元素 。哦,filter 期望 lambda 作为它的第一个参数,而不是 andmap。这就是我的意思:

(define lst '((a w) (e w) (i u) (o u)))
(filter (lambda (sl) (equal? (second sl) 'w))
        lst)
=> '((a w) (e w))