dram.me

闭包

补遗

  1. 与闭包紧密相关的是匿名函数。两者结合可以实现类似Scheme中call-with-input-file这样的接口。接口本身处理了文件的打开关闭动作,业务逻辑相关代码由传入的函数处理,这一函数往往以匿名函数方式编写,并以闭包的形式包含调用环境的变量的使用。—— 2017-09-08

闭包是现代语言常具有的一个功能,一些早期语言也在后续发展中增加了这一特性。

由于非常普遍,所以常会给人错觉闭包是编程语言的标准配备。这里提两个例外:Pascal和Prolog。

Pascal作为传统过程式语言的代表,不具备闭包还可以理解,类似的还有C。而Prolog虽然作为逻辑编程语言,但具备较多函数式编程语言的特性,不包含闭包以及高阶函数等特性就有点让人意外。

这里想要重点强调的是Prolog虽然没有闭包,但在语言应用上并没有太多障碍,这是值得分析的。所以问题是:闭包的价值是什么?