关于自由和绑定变量的问题

时间:2018-07-20 08:30:43

标签: variables scope free

我一直在阅读《计算机程序的结构和解释》,并得出一个令人困惑的观点,即本书试图解释自由变量和绑定变量。我已经在该站点上阅读了许多有关此概念的解释,但似乎没有一个对我有用。这是解释绑定变量和自由变量的文字:

*这本书使用Lisp(Scheme)编程语言

“形式化过程在过程定义中具有非常特殊的作用,因为形式参数的名称无关紧要。这种名称称为绑定变量。”

我的第一个问题是,形式参数的名称为何无关紧要为什么很重要?

“我们说过程定义绑定其形式参数。如果在整个定义中始终对绑定变量进行重命名,则过程定义的含义不变。”

好的,这里使用 binds 一词对我来说绝对没有任何意义。更重要的是,在整个定义中重命名绑定变量的一些示例是什么?我在整本书中创建的每个过程从未谈论过在过程定义之内中更改过程定义的形式参数的名称。据我了解,您可以在过程定义的开头设置形式参数。

1 个答案:

答案 0 :(得分:1)

假设我们定义了一个过程f

def f(x):
    print(x + z)

可以这样描述:f接受参数x,并在向全局变量x添加z时打印结果。

现在假设我们在整个定义中将x重命名为y

def f(y):
    print(y + z)

很明显,此函数执行的功能与以前完全相同。这是因为初始定义中的名称x或此定义中的yf中“绑定”。不管是命名为x还是y

相反,如果我们将f定义如下:

def f(x):
    print(x + w)

现在f的定义有所不同:与其将参数添加到z中,而是将其添加到w中。重要的是我们将z重命名为w,因为在函数体中z的出现是“自由的”,而不是“绑定的”。