gpt4 book ai didi

scope - 了解 LISP 中的绑定(bind)变量和自由变量

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

我正在阅读 SICP,出现了绑定(bind)变量和自由变量的话题。但是,我对此感到困惑。术语“绑定(bind)变量”是否仅适用于作为形式参数的变量?此外,文本还说过程定义“绑定(bind)”了它的形式参数。这让我感到困惑,因为有些人说我们将一个值“绑定(bind)”到一个变量。显然,当我们谈论不同类型的变量时,这个术语似乎意味着不同的东西。有人可以弄清楚绑定(bind)变量是什么以及绑定(bind)意味着什么吗?最后,与绑定(bind)变量相比,什么是自由变量?所有这些与范围有什么关系?

最佳答案

只有两种类型的变量。全局和词汇。实际上,您可以将 global 视为词法范围的可变根,在这种情况下,只有一种类型的变量。

绑定(bind)变量是当前过程的形式参数,其他所有内容,无论是全局的还是从以前的嵌套调用绑定(bind)的,都是自由变量。

例子:

(lambda (x)
(let ((y (+ x x))) ; + is free x is bound
(+ x y))) ; + and x is free, y is bound

记住 let 只是语法糖,所以它实际上是一样的:

(lambda (x)
((lambda (y)
(+ x y)) ; + and x is free, y is bound
(+ x x))) ; + is free x is bound

在以 y 作为绑定(bind)变量的内部 lambda 中,+x 是自由的。在外层 lambda 中,x 是绑定(bind)的,+ 是免费的。 + 可能是全局的。

关于scope - 了解 LISP 中的绑定(bind)变量和自由变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31630769/

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