首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >闭包是否足以描述函数式编程?

闭包是否足以描述函数式编程?
EN

Software Engineering用户
提问于 2013-07-27 19:20:06
回答 5查看 1.5K关注 0票数 5

我所知道的所有函数式编程语言(例如Haskell,Scala,Scheme,Clojure,SML,OCaml,.)支持闭包的概念。

此外,我经常读到,语言X可以被认为是功能性的,因为它支持闭包。

另一方面,有些编程语言确实有闭包,但不被认为是功能性的。我所知道的最好的例子是Smalltalk: Smalltalk有块(在大多数实现中表现为闭包,例如这里),但它被认为是一种纯面向对象的语言。

因此,虽然闭包在函数式编程中是一种非常常见的(甚至是必不可少的)构造,但它们真的足以描述函数式编程吗?如果对闭包的支持足以考虑语言功能,那么Smalltalk为什么不也被认为是功能性的呢?

还是闭包的概念与函数和面向对象的编程都是正交的?

EN

回答 5

Software Engineering用户

回答已采纳

发布于 2013-07-27 19:46:13

函数式编程语言的特点:

  • 高阶函数(将函数作为参数传递,将函数存储在数据结构中,返回函数,在运行时创建函数)。
  • 鼓励“参考透明度”。
  • 我敢说“懒惰”。
  • 不变性

函数式编程语言大量使用了功能数据结构

闭包并不意味着语言是“功能的”。示例: Java 8(如果要添加Lambdas )、Groovy和Objective,

编辑:

根据注释,我从前面的列表中删除了追忆

函数式编程语言采用“回溯”技术,因为函数式程式码更容易使用。

票数 4
EN

Software Engineering用户

发布于 2013-07-27 19:37:04

闭包与FP正交。真的,他们只是以不同的方式看待与对象相同的基本概念。如果对您来说真正重要的是行为,则使用闭包。如果真正重要的是状态数据,则使用一个对象。如今,许多面向对象语言提供了两种方法,但这并不能使它们成为“功能语言”。

票数 3
EN

Software Engineering用户

发布于 2013-07-27 21:15:10

闭包无疑是函数式编程的一个主要部分。然而,现在有许多语言支持闭包,至少在某种程度上支持函数式编程,而不是“函数语言”。例如Perl、Python、JavaScript、C#、Java8、Ruby等。相反,闭包对函数式语言显然不是完全必要的,因为第一种函数式语言早于闭包的发明。Lisp的早期版本对所有变量都使用了动态作用域,因此不能表达“闭包”的概念:当函数被调用时,变量被绑定在作用域中,而不是在声明函数时。尽管如此,我相信所有现代函数式语言都提供闭包;我当然无法想象没有它们用函数式语言进行编程!

票数 3
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/206266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档