lisp - Lambda 函数不同的参数

标签 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)
 )
)

回到最初的问题,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/

相关文章:

Vim-Sexp - 如何将每个内部表格移动到新行?

lisp - 对 project euler 4 的 lisp 程序的反馈

clojure - 函数式编程语言适合图形编程吗?

Lisp 返回符号名称的字符串

lisp - 如何在 Windows 中使用 Sublime text 2 设置 Lisp?

file - 输出到 lisp 中的文本文件

lisp - LISP 中的 CAR 和 CDR

Emacs 口齿不清 : make newly-created buffer visible before the function returns?

lisp - 将元数据添加到惰性序列

Lisp 简单问题