Lambda函数的参数不同

时间:2014-11-29 17:14:56

标签: lisp

我正在尝试创建使用相同代码但具有不同内部参数的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)。有什么方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

使用LET为每个i创建不同的绑定。

(loop for element in list
      ...

        (let ((i element))
           (lambda ()
             (print i)))

      ...

      )