gpt4 book ai didi

lisp - 为什么 collect 函数在此 Lisp 代码中不起作用

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

我无法弄清楚为什么以下功能不起作用。我试图让它返回显示所有组合的列表列表: ((1 5) (1 6) (1 7) (2 5) (2 6) (2 7) (3 5) (3 6 ) (3 7))

(defun combo3 (list1 list2)
(dolist (e1 list1)
(dolist (e2 list2)
collect '(e1 e2))))


> (combo3 '(1 2 3) '( 5 6 7) )
NIL

编辑:作为对答案的回应,我尝试将循环宏与 collect 一起使用。收集在以下循环中不起作用:

(defun combo4 (list1 list2)
(loop for element1 in list1 do
(loop for element2 in list2 do
collect (list element1 element2))))

> (combo4 '(1 2 3) '( 5 6 7) )
NIL

我试着让它在没有 nconc 的情况下工作。 collect 总是需要 nconc 吗?

最佳答案

几个问题...

首先,collectloop 的一部分宏(或设施,如果你愿意的话),所以在 dolist 中使用时会导致问题.

其次,即使collect '(e1 e2) 确实 收集了一些东西,它(可能)不是你想要的,因为它最终会得到一个类似 ((e1 e2) (e1 e2) (e1 e2) (e1 e2) (e1 e2) (e1 e2)) 的列表。 .

你(可能)想要的是这样的:

(defun cross-product (list1 list2)
(loop for element1 in list1
nconc (loop for element2 in list2
collect (list element1 element2))))

关于lisp - 为什么 collect 函数在此 Lisp 代码中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38311832/

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