我正在尝试创建使用相同代码但具有不同内部参数的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)
)
)
回到inicial问题,我在res的append中必须对每个创建的lambda都是唯一的。但是它只保存它假定的最后一个值(5 5)。有什么方法可以解决这个问题吗?
答案 0 :(得分:1)
使用LET
为每个i
创建不同的绑定。
(loop for element in list
...
(let ((i element))
(lambda ()
(print i)))
...
)