gpt4 book ai didi

lisp - 为什么 LET 在我的 quine 中不能与 EVAL 一起玩?

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

我正在尝试编写一个 Common Lisp quine。我认为最简单的选择之一如下:

(let ((program '`(let ((program ',program )
(print (eval program)))))
(print (eval program))))

这不起作用,SBCL 和 CLISP 都提示 PROGRAM 未绑定(bind)。然而,我确实发现使用 DEFPARAMETER 与 LET 不同,确实有效:

(progn
(defparameter program
'`(progn
(defparameter program
',program)
(print (eval program))))
(print (eval program)))

对于第二个示例,打印的代码和编写的代码之间的唯一区别是空格和大写,我可以轻松修复。但是,我仍然不明白为什么我的第一次尝试没有奏效。正如我所见,唯一的区别是变量的范围,但它似乎真的不重要,因为我正在评估包含它的范围内的程序。

最佳答案

(let ((program '`(let ((program ',program )
(print (eval program)))))
(print (eval program))))

Common Lisp 标准对 eval 的描述:

Evaluates form in the current dynamic environment and the null lexical environment.

因为 program 是一个词法变量,它对 eval 是不可见的。

关于lisp - 为什么 LET 在我的 quine 中不能与 EVAL 一起玩?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54625404/

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