我编写这个函数来删除列表x中的数字。
(defun rm-nums (x)
(cond
((null x) nil)
(t (mapcar 'numberp x))))但是,当我输入(rm-nums '(32 A T 4 3 E))时,返回(T NIL NIL T T NIL)
我想要它而不是返回T或Nil,我希望它只返回导致NIL的值,这些值不是数字,所以这个例子应该返回(A T E),我应该使用不带递归或迭代的mapcar或bultin函数"remove-if“
我认为它与apply-append有关,但我对此一无所知。有什么帮助吗?
发布于 2012-11-21 15:51:18
我认为你的课程考虑到了这一点:
(defun my-remove-if (pred lst)
(apply #'append (mapcar (lambda (x)
(and (not (funcall pred x))
(list x)))
lst)))它确实使用了apply、append和mapcar,就像你说的那样。示例用法:
(my-remove-if #'numberp '(32 a t 4 3 e))
=> (a t e)Rörd建议的更惯用的解决方案:
(defun my-remove-if (pred lst)
(mapcan (lambda (x)
(and (not (funcall pred x))
(list x)))
lst))https://stackoverflow.com/questions/13486215
复制相似问题