我知道functional programming有几个定义。我认为这是一个模糊的类别。我的个人定义接近“referential transparency”。
这个问题不是'函数式编程的定义是什么?'。假设我们所知道的是函数式编程是一些不同的想法,包含一些不明确的界限。
现在,对于术语函数式编程,这本书非常神奇Structure and Interpretation of Computer Programs contains the following reference。
正如我们在本书前两章所做的那样,不使用任何赋值的编程因此被称为函数式编程。对我来说这看上去很奇怪。
我的问题是:可以在函数式编程的定义中考虑“无需编程编程”吗?
答案 0 :(得分:5)
是的,我认为它可以,尽管Scala和LISP用户可能会称它为一个非常狭窄的定义。虽然函数式编程的一个真正定义仍然存在争议,但我们当然可以推断一些没有赋值的编程风格。
我在这里假设通过赋值,我们指的是变量的变异。请注意,这与绑定
完全不同int i;
i = 1; // overwrite whatever i is with 1
与
let i = 1 in .... -- say that i is a name for an expression, here 1
一旦没有任务,就没有变异。当没有突变时,某些类似循环的结构变得无用。因为,每个变量只是一个在循环上下文中是常量的表达式的名称,因此循环将永远或永远运行。唯一的方法是变化"变量是通过将函数应用于某个值来实现的,该值将参数名称绑定到该函数的生命周期内和该函数的生命周期中。循环的唯一方法是递归。反过来,这使得函数非常重要,作为奖励,所有函数都必须是纯粹的,因为没有变异。
所以,你有它:没有变异,剩下的就是用纯函数编程(如果我们不计算没有函数的声明式编程的不同方法,但事实证明这不是一般的,而是更多特定于某些任务(想想SQL,Prolog))。
现在我们可以在决定问题之前得到一些爆米花,如果只使用纯函数进行编程确实是函数式编程。 :)