首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >lisp应用追加

lisp应用追加
EN

Stack Overflow用户
提问于 2012-11-21 12:11:33
回答 1查看 1.5K关注 0票数 3

我编写这个函数来删除列表x中的数字。

代码语言:javascript
复制
(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有关,但我对此一无所知。有什么帮助吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-21 15:51:18

我认为你的课程考虑到了这一点:

代码语言:javascript
复制
(defun my-remove-if (pred lst)
  (apply #'append (mapcar (lambda (x)
                            (and (not (funcall pred x))
                                 (list x)))
                          lst)))

它确实使用了applyappendmapcar,就像你说的那样。示例用法:

代码语言:javascript
复制
(my-remove-if #'numberp '(32 a t 4 3 e))
=> (a t e)

Rörd建议的更惯用的解决方案:

代码语言:javascript
复制
(defun my-remove-if (pred lst)
  (mapcan (lambda (x)
            (and (not (funcall pred x))
                 (list x)))
          lst))
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13486215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档