gpt4 book ai didi

functional-programming - 函数式编程的核心概念是什么?

转载 作者:行者123 更新时间:2023-12-02 23:59:34 26 4
gpt4 key购买 nike

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

  1. 封装
  2. 继承,
  3. 多态性

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

最佳答案

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

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

  • 嵌套的一流函数以及适当的词法范围是核心。这意味着您可以在运行时创建一个匿名函数,其自由变量可以是封闭函数的参数或局部变量,并且您可以获得一个可以返回的值,放入数据结构中,等等。 (这是高阶函数最重要的形式,但某些高阶函数(例如 qsort!)可以用 C 编写,而 C 不是函数式语言。)

  • 将函数与其他函数组合起来解决问题的方法。没有人比约翰·休斯 (John Hughes) 做得更好。

  • 许多函数式程序员相信纯度(不受影响,包括突变、I/O 和异常)是函数式编程的核心。许多函数式程序员不这样做。

  • 多态性,无论是否由编译器强制执行,都是函数式程序员的核心值(value)观。令人困惑的是,C++ 程序员将这个概念称为“通用编程”。当编译器强制执行多态性时,它通常是 Hindley-Milner 的变体,但是更强大System F也是函数式语言的强大基础。使用像Scheme、Erlang和Lua这样的语言,您可以在没有静态类型系统的情况下进行函数式编程。

  • 最后,绝大多数函数式程序员相信归纳定义的数据类型(有时称为“递归类型”)的值(value)。在具有静态类型系统的语言中,这些通常被称为“代数数据类型”,但即使在 material written for beginning Scheme programmers 中,您也会发现归纳定义的数据类型。 。归纳定义的类型通常附带一种称为模式匹配的语言功能,它支持非常通用的案例分析形式。通常,编译器可以告诉您是否忘记了某个案例。我不想在没有这种语言功能的情况下进行编程(一旦尝试就成为一种奢侈)。

关于functional-programming - 函数式编程的核心概念是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1112773/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com