【问题标题】:delete sublist by element occurrence (Scheme)按元素出现删除子列表(方案)
【发布时间】:2013-12-25 09:44:10
【问题描述】:

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

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

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

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

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

任何想法都将不胜感激:)。

【问题讨论】:

  • 您的示例删除了树中的叶子,而不是子列表。请澄清。
  • 我编辑了我的问题:我想删除包含搜索词的子列表(或者它被称为叶子?)
  • 看看这个和你的other question,你可能想要制作某种数据结构来适应这些信息;列表可能比一些专门的数据结构更难处理。

标签: algorithm list scheme lisp


【解决方案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 中的条件,直到结果符合要求。例如,我解释了问题中的评论:

我想删除包含搜索词的子列表

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

【讨论】:

  • 啊,你让它比我的解决方案简单得多,谢谢:)
猜你喜欢
  • 2011-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-27
  • 1970-01-01
相关资源
最近更新 更多