2010-12-22 52 views

回答

9

有两个常见的(*)models of computationLambda Calculus(LC)模型和Turing Machine(TM)模型。

Lambda Calculus通过使用数学形式表示方法来计算,其中结果是通过类型域上的函数构成产生的。 LC也与Combinatory Logic有关,这被认为是对同一主题的更普遍的方法。

图灵机模型通过使用一系列基本操作(如添加,变异等)将其表示为对存储在理想化存储中的符号的操纵来处理计算。

这些不同的计算模型是不同系列编程语言的基础。Lambda微积分引起了诸如ML,SchemeHaskell之类的语言。图灵模型产生了C,C++,Pascal等。作为一种推广,大多数functional programming语言在lambda演算中都有理论基础。

由于Lambda微积分的性质,关于建立在其原理上的系统行为的某些证明是可能的。事实上,可检验性(即correctness)是液相色谱中的一个重要概念,并且使得关于液相色谱系统的某些推理和结论成为可能。 LC还涉及(并依赖于)类型理论和类别理论。相比之下,图灵模型更少依赖于类型理论,更多地将计算结构化为底层模型中的一系列状态转换。计算机的图灵机模型更难以作出断言,并且不适用于基于LC的程序所做的相同类型的数学证明和操作。然而,这并不意味着这种分析是不可能的 - 在研究虚拟化和程序的静态分析时,会使用TM模型的一些重要方面。由于函数式编程依赖于仔细选择类型和类型之间的转换,所以FP可以被认为是更“数学”的。 (*)也存在其他计算模型,但它们与本讨论的相关性较低。

4

我认为一个主要原因是纯函数式语言没有副作用,即没有可变状态,它们只将输入参数映射到结果值,这正是数学函数所做的。

0

函数式编程的逻辑结构很重based on lambda calculus。虽然它可能不是完全基于代数形式的数学的数学,但它被写为very easily from discrete mathematics

与命令式编程相比,它没有规定如何做某件事,但必须做什么。这反映了拓扑。

+2

我认为_This反映拓扑._值得一些解释! – 2010-12-22 23:56:08

+0

这很公平!拓扑学是研究在物体连续变形下仍保留的物体的性质。它通常涉及函数映射的空间,而不是函数本身 - 对于提供这种映射的所有可能函数都是有效的。在函数式编程中,映射到和来自的空间是指定的,但不是算法本身。命令式指定算法,你希望它映射到正确的空间。 – 2010-12-26 18:27:17

0

函数式编程语言的数学感受来自一些不同的特性。最明显的是名字; “功能”,即使用功能,这是数学的基础。另一个重要的原因是函数式编程涉及定义总是真实的事物集合,通过它们的交互实现所需的计算 - 这与数学证明如何完成相似。

8

纯粹的函数式编程语言是functional calculus的例子,所以在理论上,用功能语言编写的程序可以从数学意义上推论。理想情况下,您希望能够'证明'该计划是正确的。

在实践中,除了微不足道的情况外,这种推理是非常困难的,但它在某种程度上仍然是可能的。您可能能够证明程序的某些属性,例如您可能能够证明给定程序的所有数字输入时,输出始终受限于一定范围内。

在具有可变状态和副作用的非功能语言中,尝试推理程序和'证明'正确性几乎是不可能的,至少在这一刻。使用非功能程序时,您可以通过程序来思考并说服自己,其中的部分内容是正确的,并且可以运行测试某些输入的单元测试,但通常无法构建关于程序行为的严格数学证明。

+0

就是这样,直接证明逻辑源于数学的能力。 – 2010-12-22 23:10:43

相关问题