时不时地,我听到有人说“函数式编程语言更数学化”之类的话。是这样吗?如果是这样,为什么以及如何?例如,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/