尝试提出“闭包”(closure)、“柯里化”(currying)的另一种翻译方案

这两个术语曾对我的学习构成挑战,在此我斗胆提出另一种翻译方案,力求符合工程直觉、易于理解,虽然无法改变领域内固定术语的事实,对教学而言或许仍有一定参考价值,欢迎各位道友讨论!

在此,我将“closure”译为“捕获体”、“currying”译为“链序化”,以下是使用“新款翻译”写的一段话:

捕获体是指内部函数与其所捕获的自由变量共同构成的闭合实体。它赋予了内部函数超越生命周期的能力:即使外部函数执行完毕,内部函数依然能访问并保留那些被捕获的变量。

链序化将多参数函数转换为嵌套的单参数函数链。每当链中的函数被调用并接收参数,它便会返回一个捕获体,捕获并记忆当前参数。随着调用推进,捕获体不断累积上下文,直至参数集齐触发最终计算。

链序化是对函数形态的转换,捕获体是实现这种转换的底层能力。没有捕获体提供的环境持久化机制,链序化将因“失忆”而无法分步执行;反过来,链序化也展现了捕获体的环境记忆能力,使函数能够逐步收集参数,并将计算推迟到最终阶段执行。

闭包的含义就是包,闭是就词法作用域而言的。

柯里化是为了纪念伟大的数理逻辑学家Haskell Curry。

3 个赞

我学了点lisp,感觉就是现在的函数式编程,闭包,箭头函数,可变函数…这些概念都是lisp lambda的重新发明。

所以学编程从lisp入门应该是对的,因为lisp学会了,可以更易于理解其他语言的各种特性到底是什么,避免重新发明新东西

“闭包”这个翻译我觉得还挺合适的。 currying我觉得似乎算不上一个很特别的概念,因为它不太依赖于语言特性的支持也能实现。

1 个赞