1
45
我很难想到函数式编程的许多缺点。再说一次,我是函数式编程国际会议的前任主席,所以你可以肯定地认为我是有偏见的。 我认为主要的不利因素与孤立和进入壁垒有关。学习写作 好的 功能性程序意味着学会以不同的方式思考 要做好它需要大量的时间和精力的投入 . 没有老师很难学习。这些特性导致了一些缺点:
|
2
29
函数式编程的一大缺点是,从理论上讲,它与硬件以及大多数命令式语言都不匹配。(这是其明显优势之一的另一面,即能够表达 什么 你想干完而不是 你想让电脑来做。) 例如,函数式编程大量使用递归。这在纯lambda微积分中很好,因为数学的“堆栈”是无限的。当然,在真正的硬件上,堆栈是非常有限的。在大型数据集上天真地递归可能会使您的程序运行迅速。大多数函数式语言都对尾部递归进行了优化,这样就不会发生这种情况,但是使算法尾部递归可能会迫使您做一些相当糟糕的代码体操(例如,尾部递归映射函数创建一个向后列表或必须建立一个差异列表,因此,与非尾部递归版本相比,它必须做额外的工作才能以正确的顺序返回正常映射列表)。 (感谢Jared Updike提出的差异列表建议。) |
3
23
如果您的语言不能提供很好的机制来通过程序检测状态/异常行为(例如,一元绑定的语法糖),那么任何涉及状态/异常的任务都将成为一件烦琐的事情。(即使有了这些糖,有些人可能会发现在FP中处理状态/异常更加困难。) 函数式习语通常会导致大量的控制反转或惰性,这通常会对调试(使用调试器)产生负面影响。(由于不变性/引用透明性,FP不易出错,这在某种程度上抵消了这一点,这意味着您需要更少的调试次数。) |
4
13
Philip Wadler为此写了一篇论文(名为为什么没有人使用函数式编程语言),并指出了阻止人们使用FP语言的实际缺陷:
更新:访问ACM的用户无法访问旧链接: |
5
8
除了速度或采用问题和解决一个更基本的问题外,我听说函数式编程很容易为现有数据类型添加新函数,但添加新数据类型“很难”。考虑: (用SMLnj书写。另外,请原谅这个有点做作的例子。)
但是,如果我向Animal添加一个新类型,我必须遍历每个函数来添加对它的支持:
|
6
3
我只是想讲一个趣闻轶事,因为我现在正在学习哈斯凯尔。我之所以学习Haskell,是因为将函数与动作分离的想法很吸引我,而且由于纯函数与非纯函数的隔离,隐式并行化背后有一些非常吸引人的理论。
我已经学了三天的函数折叠课了。Fold似乎有一个非常简单的应用程序:获取一个列表并将其缩减为单个值。Haskell实现了
噢,fold不必将列表缩减为非列表类型的标量,列表的标识函数可以编写
/我又回去看书了。 |
7
2
以下是我遇到的一些问题:
|
8
0
撇开函数式编程具体实现的细节,我看到两个关键问题:
我想这两者都是由于函数式编程的普遍缺乏实用性,这是由于函数式编程被编程研究人员比普通的编码人员使用得更为强烈。一个好的工具可以使专家完成伟大的事情,但是一个好的工具是一个能让普通人接近专家通常所能做的事情的工具,因为这是一个更困难的任务。 |
nanounanue · 使用python和高级操作符的函数管道 6 年前 |
Zazaeil · 这个特定的递归可以用尾部优化的方式重写吗? 6 年前 |
corvid · 使用ramda通过变量进行升序/降序 6 年前 |
CodingNow · Scala:如何制作多种方法并逐一应用? 6 年前 |