gpt4 book ai didi

口齿不清应用追加

转载 作者:太空宇宙 更新时间:2023-11-03 18:42:39 24 4
gpt4 key购买 nike

我编写了这个函数来从列表 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)我应该在没有递归或迭代或 bultin 函数“remove-if”的情况下使用 mapcar

我认为它与一个叫做 apply-append 的东西有关,但我对此一无所知。有帮助吗?

最佳答案

我认为您的类(class)考虑到了这一点:

(defun my-remove-if (pred lst)
(apply #'append (mapcar (lambda (x)
(and (not (funcall pred x))
(list x)))
lst)))

正如您所说,它确实使用了applyappend 以及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))

关于口齿不清应用追加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13486215/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com