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

时间:2018-11-19 13:04:58

标签: scheme nested-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)))

不起作用。我在做什么错了?

1 个答案:

答案 0 :(得分:1)

您不应引用该列表:'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))