我希望我正确地考虑我的问题。
据我了解,命令式编程(简而言之)是基于变异、控制结构(如循环和分配)。
当我学习有关函数式编程的课程时,他们提到了一点。我想深入了解它..
重点是:
如果我们想按照他们的数学理论来实现高级概念,就没有变异的地方。
我从中了解到的是,分配给特定变量的值/系数应该相同,并且不能不时重新分配以从中创建抽象定义。这是对的吗 ?
可以多加点吗?
我希望我正确地考虑我的问题。
据我了解,命令式编程(简而言之)是基于变异、控制结构(如循环和分配)。
当我学习有关函数式编程的课程时,他们提到了一点。我想深入了解它..
重点是:
如果我们想按照他们的数学理论来实现高级概念,就没有变异的地方。
我从中了解到的是,分配给特定变量的值/系数应该相同,并且不能不时重新分配以从中创建抽象定义。这是对的吗 ?
可以多加点吗?
你可以这样想。在 20 世纪初,数学水平变得如此之高,以至于科学家们已经能够将其应用于数学方法的研究,特别是计算和证据。
作为研究的结果,有两种主要方法:图灵机和lambda 演算。
第一种方法(图灵机)有一个关于记录在磁带上的状态的想法,并且可以更改。这种方法也将算法视为一系列步骤。
在第二种方法(λ演算)中,任何计算都被视为几个函数的组合。
Fe 让我们看一下正弦函数的泰勒级数:
第一个表达式给了我们一个函数计算的例子。没有计算正弦的步骤,只有函数的组合。这些函数的输入是两件事:x
自然数和自然数系列1, 2, ...
。我们将一些复杂的函数映射到系列的每个元素,然后我们在function 的帮助下将新系列减少为单个值+
。
第二个表达式为我们提供了一个命令式计算的例子。至少我们可以在这里看到单独的计算步骤。
您可以在《计算机程序的结构和解释》一书中找到对函数式编程的激动人心的介绍。
这是非常正确的——如果你不改变你的变量值,那么证明你的程序是正确的会容易得多。
如果您有可变状态,则您的程序取决于您的环境,并且函数调用顺序可能很重要。在这样的情况下
var a = "test"
def foo() = {
a = "foo"
}
def bar() = a
您的两个函数都可以正常工作,但它们的组合可能会失败(如果您期望 bar() 中的“测试”)。在功能方法中,如果您的程序的某些部分是正确的,那么您的程序作为一个整体是正确的。
如果没有突变,则没有必要的变量。这是第一个。
更重要的是,命令式编程有利于实现算法——逐步说明如何做某事,而函数式编程更适合实现概念——用其他术语定义的术语等。函数式编程更接近数学理论,通常基于事物的定义而不是算法。