【发布时间】:2014-05-28 02:46:44
【问题描述】:
我是 lisp 的新手。我正在编写一个递归函数来删除列表中所有出现的元素。
这是我尝试写的,只删除列表中的原子。
(defun my-remove(x list)
(if(null list)
nil
(if(eql x (car list))
(my-remove x (cdr list))
(cons (car list) (my-remove x (cdr list))))))
现在,我必须对其进行修改,使其同时处理列表中子列表的元素。该函数应从子列表中删除元素并仍将其保留为子列表(它不应该展平子列表)。
示例- 输入 -
(my-recursive-remove 'a '((a b) a (c d e a) (a a) b))
预期输出 -
((b) (c d e) nil b))
我知道 mapcar 可用于将函数应用于列表的所有元素。但是我的函数有两个参数,要删除的元素和列表。是否还有任何方法可以应用 mapcar,或者您可以提出任何替代方案吗?
我只能使用基本功能cons、equal、defun、car、cdr等
【问题讨论】:
标签: lisp common-lisp