函数式编程中的自由和绑定标识符

free and bound identifiers in functional programming

我一直在为这个问题苦思冥想,但我想不通。我已经从维基百科和几本书中阅读了自由变量 "Free variables and bound variables" 的定义,但我无法得到正确的答案

考虑以下代码:

local A B C=1 D=2 in
  A = 1
  proc {Add E F G}
     E = A + D + F
  end
end

这些标识符(A、B、C、D、E、F、G)中哪些是免费标识符?

任何指令的自由标识符是指令内出现的与指令外的声明相对应的标识符。

所以答案似乎是 A 和 D。

免费标识符的概念总是伴随着上下文。如果你只考虑语句 E=A+D+F 四个标识符是免费的。但是如果考虑过程定义,E 和 F 现在是绑定的,因为它们是形式参数。所以自由标识符是 A 和 D。最后,如果你考虑你给出的整个代码,没有自由标识符,因为所有标识符都被声明了。

参考:计算机编程的概念、技术和模型,作者:Peter Van Roy 和 Seif Haridi。

第 57 页末尾和第 58 页很有趣。

如果你报名了课程,前三章可以在edX平台上找到Paradigms of Computer Programming