关于命令式语言和函数式(声明式的子集)编程语言之间差异的明确答案是什么,可以用实际例子来解释吗?有哪些主要或最重要的命令式语言?那么函数式语言呢?
我确实在这里阅读了这个答案,但它实际上让我更加困惑...... :-(函数式编程语言和命令式编程语言有什么区别?
关于命令式语言和函数式(声明式的子集)编程语言之间差异的明确答案是什么,可以用实际例子来解释吗?有哪些主要或最重要的命令式语言?那么函数式语言呢?
我确实在这里阅读了这个答案,但它实际上让我更加困惑...... :-(函数式编程语言和命令式编程语言有什么区别?
让我们使用这个简单的代码:a = b + c
来检查差异。
当我们用a = b + c
命令式语言(如 C)编写时,我们只是将当前值b + c
赋给变量a
,仅此而已。我们没有对是什么做出任何基本的陈述a
。相反,我们只是在执行一个过程中的一个步骤。
当我们使用声明性语言(如 Microsoft Excel)编写代码时,我们会断言和a = b + c
之间的关系a
,因此其他两者的总和总是如此。这不是一个过程中的一个步骤,它是一个不变的,一个保证,一个真理的宣言。b
c
a
函数式语言也是声明性的,但几乎是偶然的。例如,在 Haskel 中a = b + c
也断言了一个不变的关系,但这只是因为 b 和 c 是不可变的。
没有大的区别。
我的意思是,现在计算机是你的奴隶(*)(你是一个非常不幸的国王)。这要么是一个非常愚蠢的,你自己给他关于每一分钟细节的命令。比如,“洗我马厩的第一匹马”。(甚至“拿一桶水去马厩的第一个马厩。洗那里的马。清理马厩的第一个马厩”。)然后,“洗我的第二匹马”。(甚至,“桶……第二个摊位……等等”)。等等。
或者它是一个稍微懂一点的奴隶,你给他一个稍微笼统的命令,比如“洗我马厩里的所有马匹”。但实际上,你可以对你最初愚蠢的奴隶这么说,随着岁月的流逝,他变得更聪明了,为他需要执行的每个动作写下食谱,所以更通用的食谱可以参考更简单的食谱,而不是重新描述每一步。
所以现在真的没有区别。大概你在与第二个奴隶交谈时遵守了某些限制,这使你更容易向他描述你的下一个请求。你还在做所有的描述。
两者都不像一个总经理,你向他解释你希望如何代表你完成工作的一般感受,他们自己会弄清楚细节。
当然,一个总经理需要很多助手,他们可能会使用很多愚蠢的奴隶。而且更笨。
一个聪明的总经理可能比你自己更了解经营你的帝国。他们甚至可能完全取代你掌舵。
上述观点认为功能性不是声明性的子集。
编辑:第二个奴隶拒绝从你那里了解某些事情。你可以说出第一个,例如:“ n是1。拿桶水到第n个摊位。n现在是2。在第n个摊位洗马。n现在是3。清理第n个摊位”。这将导致运行时错误。
更聪明的奴隶在那里不会理解你。他知道第一个马厩不可能突然变成第二个;这是第一个,一直都是。这可以帮助您不发出愚蠢的命令。这是实用的——知道一些事情还没有完成,拒绝遵循愚蠢的命令。势在必行,完全没有问题。因此,使用命令式编程的责任在于你,而且只有你自己;功能范式强加给你的纪律减轻了你的负担。
(*)很抱歉从人类的黑暗历史中唤起了这种令人作呕的范式;即使在今天,在世界某些地方也不是那么遥远。