algorithm - 按元素出现删除子列表(方案)

标签 algorithm list scheme lisp

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

例如,让我们列出:

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

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

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

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

最佳答案

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

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

I want to delete the sublist that contains the searched word

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

关于algorithm - 按元素出现删除子列表(方案),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20771344/

相关文章:

c++ - 是否有使用用户提供的提示的最近邻数据结构?

javascript - 内联执行生成的汇编程序

scheme - 在方案中分配原子列表

Python 交换列表

list - Prolog中列表的条件解析

LISP SICP 视频讲座 2a 平均潮湿问题

php - 获取数组元素的所有有序、连续组合

c# - 如何生成所有可能的单词

java - 二分查找中的第一次出现

python - 列表(数组)中一定范围内的随机样本 | Python 3.x