gpt4 book ai didi

lisp - 从逻辑列表中选择。口齿不清

转载 作者:太空宇宙 更新时间:2023-11-03 19:00:10 26 4
gpt4 key购买 nike

如何在 Common lisp 中实现这一点?

(logselect (t nil t) (list1 list2 list3)) ---> (list1 list2)

我编写了以下函数,但我认为有更好的方法(也许是内置函数?)。

(defun logselect (loglist lista)
(let ((listaL) (maskL) (toremove))
(setq listaL (mapcar #'list lista))
(setq maskL (mapcar #'cons loglist listaL))
(setq toremove (mapcar #'(lambda (x) (car (and (car x) (cdr x)))) maskL))
(remove nil toremove)
)
)

提前谢谢你。

最佳答案

这很容易使用 LOOP 完成:

(defun logselect (loglist lista)
(loop for test in loglist
for value in lista
when test collect value))

如果您更喜欢更“lispy”的解决方案,您可以使用 mapcan 来实现:

(defun logselect (loglist lista)
(mapcan #'(lambda (test value)
(when test (list value)))
loglist lista))

mapcan 当您想使用映射函数有条件地添加列表元素时,它是一个有用的函数。该函数返回一个列表,并将它们全部连接起来以创建最终结果,因此如果它不想添加任何内容,它可以返回一个空列表。

关于lisp - 从逻辑列表中选择。口齿不清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40619551/

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