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

时间:2017-11-22 12:03:02

标签: functional-programming declarative imperative

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

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

2 个答案:

答案 0 :(得分:1)

没有重大区别。

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

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

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

两者都不像总经理那样,您可以向他们解释您对如何代表您完成工作的一般感受,并且他们弄明白

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

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

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

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

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

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

答案 1 :(得分:1)

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

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

当我们用像Microsoft Excel这样的声明性语言编写a = b + c时,我们声称abc之间存在关系,以便始终如此a是其他两个的总和。这不是一个过程中的一步,它是一个不变的,一个保证,一个真理的宣言。

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