我所知道的所有函数式编程语言(例如Haskell,Scala,Scheme,Clojure,SML,OCaml,.)支持闭包的概念。
此外,我经常读到,语言X可以被认为是功能性的,因为它支持闭包。
另一方面,有些编程语言确实有闭包,但不被认为是功能性的。我所知道的最好的例子是Smalltalk: Smalltalk有块(在大多数实现中表现为闭包,例如这里),但它被认为是一种纯面向对象的语言。
因此,虽然闭包在函数式编程中是一种非常常见的(甚至是必不可少的)构造,但它们真的足以描述函数式编程吗?如果对闭包的支持足以考虑语言功能,那么Smalltalk为什么不也被认为是功能性的呢?
还是闭包的概念与函数和面向对象的编程都是正交的?
发布于 2013-07-27 19:46:13
函数式编程语言的特点:
函数式编程语言大量使用了功能数据结构。
闭包并不意味着语言是“功能的”。示例: Java 8(如果要添加Lambdas )、Groovy和Objective,
编辑:
根据注释,我从前面的列表中删除了追忆。
函数式编程语言采用“回溯”技术,因为函数式程式码更容易使用。
发布于 2013-07-27 19:37:04
闭包与FP正交。真的,他们只是以不同的方式看待与对象相同的基本概念。如果对您来说真正重要的是行为,则使用闭包。如果真正重要的是状态数据,则使用一个对象。如今,许多面向对象语言提供了两种方法,但这并不能使它们成为“功能语言”。
发布于 2013-07-27 21:15:10
闭包无疑是函数式编程的一个主要部分。然而,现在有许多语言支持闭包,至少在某种程度上支持函数式编程,而不是“函数语言”。例如Perl、Python、JavaScript、C#、Java8、Ruby等。相反,闭包对函数式语言显然不是完全必要的,因为第一种函数式语言早于闭包的发明。Lisp的早期版本对所有变量都使用了动态作用域,因此不能表达“闭包”的概念:当函数被调用时,变量被绑定在作用域中,而不是在声明函数时。尽管如此,我相信所有现代函数式语言都提供闭包;我当然无法想象没有它们用函数式语言进行编程!
https://softwareengineering.stackexchange.com/questions/206266
复制相似问题