通常,“否”过于简单。 我本周将其用作TL; DR,但值得注意其背后的核心原则。
自然,相同编程范例中的算法的结构相同。 因此,约束范例自然会约束语言。 其余的答案有时是一个答案。
背景
计算是一种数学练习。 那是一个超数学的不变式。 所以我留在那里
编程语言都以某种方式将人类可读的内容简化为机器代码。 3GL及以上的性质是句法规律性。 将使用不一致的自然语言直接转换为机器代码的效果不是很好。
以数学形式表示的算法在编程语言中将具有“等效”的含义。 为了达到目的,我们通过适当的象征意义直观地将“数学”空间限制在范式的空间中,并将其映射到语言的关键字中。
Doff Ye Cap到Godel?
戈德尔的第一个不完备性定理证明数学不可能在完全相同的时间既完整又一致。 对于大多数编程语言,一致性规则。 为了获得一致性(在编辑器的一个部分中使用的循环概念与在另一部分中使用的循环相同),我们必须放弃完整性,这很好,因为该语言还是一种常规语法。 并非终端字符的每个组合都是有效的。 因此,这自然是不完整的。 会🙂
映射不同的范例
例如,函数编程中的默认循环结构是递归。 这非常紧密地映射到数学上称为递归关系的自然结构。
例如:

以功能语言表示为Haskell:
阶乘0 = 1
阶乘t = t *阶乘(t-1)
相比之下,虽然您可以使用C#方法执行以下操作:
//上面的东西
public int factor(int t){
返回t == 0? 1:t *阶乘(t_1);
}
我在谚语旅行中遇到的很多(如果不是大多数)人实际上都写了这个迭代版本:
public int factor(int t){
int结果= 1;
for(int i = t; i> 0; i —){
结果* = i;
}
返回结果;
}
在这种情况下,这两者的组合时间复杂度相同,但是递归函数占用的内存稍多(存储函数堆栈帧)。 在更高级的情况下(例如,二叉树,n元树),编写它的方式从根本上改变了算法的时间复杂度。
此外,不一定有一种方法可以用计算语言定义数学结构。 计算机甚至在技术上都难以解决分数问题。 实际上,Excel并非始终都正确地计算或存储分数。
摘要
这个问题通常是范式之间的方式。 确实,在声明性语言中,情况甚至更糟,因为通常没有明确的循环概念或变量赋值。 诸如XSL,TSQL和PL / SQL之类的语言,甚至诸如SML之类的半功能性语言都在非标准操作上附加以允许分配。 例如游标,“选择”到变量,while循环等。因此,在引入编程构造的地方,它试图使其更完整(可以说是过度完成。有时会失去一致性并将副作用引入非结构化)。 -副作用语言是有风险的)。 然而,有足够的重叠来抽象出概念并从数学向下学习。

你喜欢这篇文章吗? 不要忘了打动一下,并与您的朋友分享。 特别是您的朋友和家人需要知道的重要话题。