gpt4 book ai didi

scheme - Scheme 中的 Eval 访问词法变量

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

(define x 44) (define y 25)
(let ((x 12) (y 23)) (if #f (eval x) (eval y)))

上面的代码返回 25,因为 eval 使用了全局变量。如何创建类似于 eval 但在看到变量引用时查找局部变量的东西?

最佳答案

不确定您使用的是什么方案,但在 Racket 中我得到了不同的答案:

> (define x 44)
> (define y 25)
> (let ((x 12) (y 23)) (if #f (eval x) (eval y)))
23

这是我在任何 Scheme 或 Lisp 中所期望的行为。我想你是想在 eval 中引用 xy:

> (let ((x 12) (y 23)) (if #f (eval 'x) (eval 'y)))
25

现在我们得到了您期望的结果。如果您不引用 eval 的参数,那么它会被评估,然后作为值而不是表单传递给 eval。在前一种情况下,您最终得到 (eval y) --> (eval 23) --> 23。但是,您可以使用 quasi-quoting 来利用它,有选择地取消引用要在当前范围内评估的变量:

> (let ((x 12) (y 23)) (eval `(if #f ,x ,y)))
23

关于scheme - Scheme 中的 Eval 访问词法变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20026656/

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