gpt4 book ai didi

Lisp:为什么引入词法作用域后 `eval` 失宠了?

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

刚刚在 AI 编程范式中看到 Peter Norvig 的一句话:

In the past, eval was seen as the key to Lisp's flexibility. In modern Lisps with lexical scoping, such as Common Lisp, eval is used less often (in fact, in Scheme there is no eval at all). Instead, programmers are expected to use lambda to create a new function, and then apply or funcall the function.

关于为什么 eval 不是一个好主意的考虑,例如 this ,但是我更感兴趣的是 eval 和动态(特殊?)变量之间的交互,以及词法的引入如何导致 eval 失宠。在引入词法变量之前,有哪些常见的eval 习语?

最佳答案

不幸的是,我手头没有引文,但据我记得所听到的,该文本可能指的模式是一种模仿词法范围界定的方式。也就是说,在词汇 Common Lisp 中,我们可以简单地写:

(defun constant-adder (a)
(lambda (b) (+ a b)))

在对所有变量使用动态范围的语言中(但在其他方面使用相同的语法),可以通过构造 lambda 表达式来模拟词法范围:

(defun constant-adder (a)
(eval `(lambda (b) (+ (quote ,a) b))))

也就是说,我们在运行时构造一个表达式,其中a 的值被替换,而不是让语言捕获a自动。

(但是,您的引述表明也没有使用 lambda。对于那种情况下会发生什么,我没有合理的解释。)

关于Lisp:为什么引入词法作用域后 `eval` 失宠了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27647214/

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