命令式和函数式编程语言之间有什么区别?

问题描述 投票:-2回答:2

关于命令式语言和功能性(声明性)编程语言之间的区别,有什么确定的答案,可以通过实际例子来解释吗?什么是主要或最重要的命令式语言?功能语言怎么样?

我确实在这里读到了这个答案,但实际上让我更加困惑...... :-(What is difference between functional and imperative programming languages?

functional-programming declarative imperative
2个回答
1
投票

没有重大区别。

我的意思是,现在计算机是你的奴隶(*)(你是一个非常不幸的国王)。这是一个非常愚蠢的,你自己给每个细节的命令。就像,“洗我马厩里的第一匹马”。 (或者甚至“把一桶水带到马厩的第一个摊位。在那里洗马。清理马厩里的第一个摊位。”)然后,“洗我的第二匹马”。 (甚至,“斗......第二档......等等”)。等等。

或者它是一个稍微知识渊博的奴隶,在那里你给他一个稍微更普遍的命令,比如“洗掉我马厩里的所有马匹”。但实际上,你可以这样说给你最初愚蠢的奴隶,他多年来通过写下他需要执行的每个动作的食谱来变得更聪明,所以更一般的食谱可以参考更简单的食谱而不是重新描述每一步。

所以现在确实没有区别。大概在与第二个奴隶交谈时你会遵守某些限制,这使你更容易描述你的下一个请求。你还在做所有的描述。

两者都不像总经理,你可以向他们解释你对如何代表你做事的一般感受,并且他们自己弄清楚细节。

当然,总经理需要很多助手,他们可能会使用许多愚蠢的奴隶。又笨蛋了。

一个聪明的总经理可能会比你自己更了解运行你的帝国。他们甚至可能完全取代你。

上述认为功能不是声明的子集。

编辑:第二个奴隶拒绝理解你的某些事情。你可以告诉第一个,例如:“n是1.把桶水带到第n档。现在是2.在第n档中洗马。现在是n。清理第n档”。这将导致运行时错误。

聪明的奴隶只是不会在那里了解你。他知道第一个稳定不能突然变成第二个;这是第一个,一直都是。这有助于您不要给出愚蠢的订单。这是功能性的 - 知道一些事情没有完成,拒绝遵循愚蠢的命令。根本不可能,完全没有问题。因此,通过命令式编程,责任在你身上,而你一个人;功能范式强加给你的纪律减轻了你的负担。


(*)很抱歉从人类的黑暗历史中唤起这种恶心的范式;即使在今天,在世界某些地方也不会那么遥远。


1
投票

让我们使用这个简单的代码:a = b + c来检查差异。

当我们用命令式语言(如C)编写a = b + c时,我们将b + c的当前值赋给变量a,仅此而已。我们没有就a是什么做出任何基本陈述。相反,我们只是在一个过程中执行一个步骤。

当我们用像Microsoft Excel这样的声明性语言编写a = b + c时,我们断言abc之间的关系,以便a总是这两种情况的总和。这不是一个过程中的一步,它是一个不变的,一个保证,一个真实的宣言。

功能语言也是声明性的,但几乎是偶然的。例如,在Haskell中,qazxsw poi也断言了一个不变的关系,但这只是因为b和c是不可变的。

© www.soinside.com 2019 - 2024. All rights reserved.