我正在尝试创建使用相同代码但具有不同内部参数的 lambda 函数。 为澄清起见,我将代码放在这里:
(defun testes ()
(setf lol '())
(loop for i in (list 1 2 3 4 5 )
do (loop for j in (list 1 2 3 4 5)
do (setf lol (append lol (list (cons i j))))))
lol
)
(defun mainff ()
(setf lol (testes))
(setf res ())
(print lol)
(loop for i in lol
do (setf res (append res (list #'(lambda ()
(print i)
))))
)
res
)
(defun fun()
(setf res (mainff))
(loop for i in res
do (funcall i)
)
)
回到最初的问题,res 后面的 i 对于创建的每个 lambda 必须是唯一的。但是它只保存它假定的最后一个值 (5 5)。有什么办法可以解决吗?
最佳答案
使用 LET
为每个 i
创建不同的绑定(bind)。
(loop for element in list
...
(let ((i element))
(lambda ()
(print i)))
...
)
关于lisp - Lambda 函数不同的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27204830/