首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数式编程的核心概念是什么?

函数式编程的核心概念是什么?
EN

Stack Overflow用户
提问于 2009-07-11 02:29:53
回答 6查看 22.6K关注 0票数 56

在面向对象编程中,我们可以说核心概念是:

  1. encapsulation
  2. inheritance,
  3. polymorphism

在函数式编程中会是什么呢?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-07-11 04:38:09

对于函数式编程中的基本概念是什么,社区并没有达成共识。在Why Functional Programming Matters (PDF)中,John Hughes认为它们是高阶函数和惰性求值。西蒙·佩顿·琼斯在“Wearing the Hair Shirt: A Retrospective on Haskell”中说,真正的本质不是懒惰,而是纯洁。理查德·伯德会同意的。但是有一大群Scheme和ML程序员,他们非常乐意编写有副作用的程序。

作为一个实践和教授函数式编程20年的人,我可以给你一些被广泛认为是函数式编程核心的想法:

核心是具有适当词法作用域的

  • Nested,一流函数。这意味着您可以在运行时创建一个匿名函数,其自由变量可以是封闭函数的参数或局部变量,并且您可以获得一个可以返回、放入数据结构中的值,等等。(这是高阶函数最重要的形式,但是一些高阶函数(如qsort!)可以用C编写,它不是将函数和其他函数组合在一起来解决问题的函数language.)
  • Means。没有人比John Hughes做得更好了。
  • 许多函数式程序员相信纯洁性(不受影响,包括突变、I/O和异常)是函数式编程的核心。许多函数式程序员做not.
  • Polymorphism,,无论它是否由编译器强制执行,都是函数式程序员的核心价值观。令人困惑的是,C++程序员将这种概念称为“泛型编程”。当编译器强制执行多态性时,它通常是Hindley-Milner的变体,但更强大的System F也是函数式语言的强大基础。使用像Scheme、Erlang和Lua这样的语言,您可以在没有静态类型的情况下进行函数式编程。大多数函数式程序员都相信归纳定义的数据类型(有时称为“递归类型”)的价值。在具有静态类型系统的语言中,这些通常被称为“代数数据类型”,但即使在material written for beginning Scheme programmers中,您也会发现归纳定义的数据类型。归纳定义的类型通常附带一个称为模式匹配的语言特性,它支持一种非常通用的案例分析形式。如果你忘记了一个大小写,编译器通常会告诉你。我不想在没有这种语言特性的情况下编程(一种奢侈品一旦尝试就成了必需品)。
票数 65
EN

Stack Overflow用户

发布于 2009-07-11 02:35:53

在计算机科学中,函数式编程是一种编程范例,它将计算视为数学函数的求值,并避免状态和可变数据。它强调函数的应用,而命令式编程风格则强调状态的变化。函数式编程起源于lambda演算,这是20世纪30年代开发的一个正式系统,用于研究函数定义、函数应用和递归。许多函数式编程语言都可以看作是对lambda演算的修饰。- Wikipedia

简而言之,

  1. Lambda
  2. Higher Order Functions
  3. Immutability
  4. No side-effects

微积分

票数 41
EN

Stack Overflow用户

发布于 2009-07-11 03:24:21

不是直接回答你的问题,但我想指出“面向对象”和函数式编程并不一定是矛盾的。你引用的“核心概念”有更一般的对应物,同样适用于函数式编程。

封装,更广泛地说,是模块化。据我所知,所有纯函数式语言都支持模块化编程。您可能会说,这些语言比典型的“面向对象”语言更好地实现封装,因为副作用破坏了封装,并且纯函数没有副作用

继承,更一般地,是逻辑隐含,这是一个函数所代表的。正则subclass -> superclass关系是一种隐函数。在函数式语言中,这是用类型类隐含来表示的(我认为隐含是这两个中更通用的一个)。

"OO“学派中的多态性是通过子类型(继承)实现的。还有一种更一般的多态性,称为参数多态性(也称为。泛型),您会发现纯函数式编程语言支持它。此外,一些支持“更高种类”,或更高阶泛型(也称为。类型构造函数多态性)。

我想说的是,您的“OO核心概念”并不是以任何方式特定于OO的。作为一个人,我会争辩说,事实上,OO没有任何核心概念。

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

https://stackoverflow.com/questions/1112773

复制
相关文章

相似问题

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