oop - 函数式编程是否被认为更多 "mathematical"?如果是这样,为什么?

标签 oop functional-programming math imperative-languages

时不时地,我听到有人说“函数式编程语言更数学化”之类的话。是这样吗?如果是这样,为什么以及如何?例如,Scheme 是否比 Java 或 C 更数学?还是 haskell ?

我无法准确定义什么是“数学”,但我相信你能体会到。

谢谢!

最佳答案

有两种常见的(*) models of computation : Lambda Calculus (LC) 模型和 Turing Machine (TM) 模型。

Lambda 微积分 通过使用数学形式来表示计算来进行计算,其中通过在类型域上组合函数来产生结果。 LC也与Combinatory Logic有关,这被认为是针对同一主题的更通用的方法。

图灵机模型通过将计算表示为使用一组基本操作(如加法、变异等)对存储在理想化存储上的符号进行操作来进行计算。

这些不同的计算模型是不同系列编程语言的基础。 Lambda 微积分催生了诸如 ML 之类的语言。 , Scheme , 和 Haskell .图灵模型产生了C , C++ , Pascal , 和别的。作为概括,大多数functional programming语言有 lambda 演算的理论基础。

由于 Lambda 微积分的性质,关于建立在其原理上的系统的行为的某些证明是可能的。事实上,可证明性(即 correctness)是 LC 中的一个重要概念,它使有关 LC 系统的某些类型的推理和结论成为可能。 LC 还与(并依赖于)类型论和范畴论有关。

相比之下,图灵模型较少依赖类型理论,而更多地将计算结构化为底层模型中的一系列状态转换。图灵机计算模型更难以断言,并且不适合基于 LC 的程序所做的相同类型的数学证明和操作。然而,这并不意味着没有这样的分析是可能的——在研究程序的虚拟化和静态分析时会用到 TM 模型的一些重要方面。

因为函数式编程依赖于仔细选择类型和类型之间的转换,所以 FP 可以被视为更“数学”。

(*) 其他计算模型也存在,但它们与本次讨论的相关性较小。

关于oop - 函数式编程是否被认为更多 "mathematical"?如果是这样,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4514458/

相关文章:

java - 类未在处理 IDE 中调用

algorithm - 安排具有重叠周期性任务的工作人员

javascript - 将函数列表应用于 Javascript 中的可能值

java - Lambda 表达式和静态或实例字段

recursion - 为什么这个 F# 内部函数不是尾递归的?

ruby - 给定数的所有因数

java - 如何生成对相似数和十的幂有限制的随机数

c# - C# 项目中事件的常量应该放在哪里

c++ - 具有附加默认参数的接口(interface)实现?

c++结构包含对象