按元素出现删除子列表(Scheme)

时间:2013-12-25 09:44:10

标签: algorithm list scheme lisp

如何通过仅搜索其中的一个元素来删除子列表。

例如,让我们有一个列表:

( (pacific (atlanta ohaio) (NY LI))
  (atlanta (pacific blue) (ohaio green)) )

我想从列表中删除“pacific”并获取:

( (pacific (atlanta ohaio) (NY LI))
  (atlanta (ohaio green)) )

非常感谢任何想法:)。

1 个答案:

答案 0 :(得分:1)

在问题中没有明确说明从输入列表中删除元素的标准。这适用于显示的示例:

(define lst
  '((pacific (atlanta ohaio) (NY LI))
    (atlanta (pacific blue) (ohaio green))))

(map (lambda (slst)
       (filter (lambda (e)
                 (not (and (list? e) (member 'pacific e))))
               slst))
     lst)

=> '((pacific (atlanta ohaio) (NY LI)) (atlanta (ohaio green)))

如果需要,对于其他输入,您可以调整最里面的lambda中的条件,直到结果符合要求。例如,我在问题中解释了评论:

  

我想删除包含搜索词

的子列表

作为:“在子列表中的任意位置中找到搜索到的单词”;如果搜索到的单词只能在第一个位置找到,则相应地调整条件。

相关问题