首页 > 解决方案 > 绑定到自由变量的变量仍然是自由变量吗?

问题描述

我正在看教科书中的一些问题,这些问题是关于变量是自由的还是有约束的。我不确定这两个。

首先,我想确保我理解自由与绑定的概念。我相当确定这个 x 是以下的自由变量:

variable x is free in expression "x"

我相信这是真的,但我只是想确定一下。

然而,这两个问题我不太确定。

(/ (+ 1 x) (let x 2 (+ x x))),
(let x y (/ (+ 1 x) (let x 2 (+ x x))))

对于顶部表达式,第一个子表达式中的 x 是未绑定的(对吗?),但第二个子表达式中的 x 绑定为 2,那么这是否意味着关于整个表达式的 x 是未绑定的?

对于底部表达式,x 绑定到 y,但 y 是一个自由变量(?)。那么 x 是自由的,因为 y 是自由的,还是因为 x 仍然与 y 有界,所以它是有界的?

标签: variablesfunctional-programmingfree-variablebound-variable

解决方案


因为(/ (+ 1 x) (let x 2 (+ x x)))x第一个子表达式中的 是未绑定的,但x在第二个子表达式中是绑定的2,那么这是否意味着x关于整个表达式的 in 是未绑定的?

是的。尽管我只会对具体的变量表达式使用术语“绑定”或“自由”,而不是名称。如您所见," x" 所指的含义是模棱两可的。

我会说“整个表达式一个自由变量x”,这是您在尝试评估表达式时通常关心的内容。

对于(let x y (/ (+ 1 x) (let x 2 (+ x x)))),x绑定到y, 但是y是一个自由变量。那么x是免费的,因为y它是免费的,还是因为x仍然有界而受到约束y

是绑定的x(并且可以被替换)。y免费。


推荐阅读