函数式编程语言能做什么,那些命令式的语言可以做到吗?

时间:2015-01-17 04:22:02

标签: functional-programming

我正在学习函数式编程。我只是跳进去,不知道我进入了什么。但我已经了解到,函数式编程语言与另一类称为命令式语言的语言不同。我收集C和C ++是后者的例子。

学习编程语言显然需要时间和精力。到目前为止,我还没有看到任何迹象表明命令式语言与功能语言相比有任何限制。

我的问题:

函数式编程语言是否提供了使它们对所有程序员广泛使用的好处?

2 个答案:

答案 0 :(得分:4)

实际上是另一种方式。功能语言是有限制的。 此限制是非常有价值的功能 。当您使用纯函数语言(或语言的纯函数子集)时,您将失去程序具有副作用的能力,但这为您提供了更高抽象级别的强大功能:纯函数式程序更容易 理由 ,更容易 合并 进入更大的系统。这些好处大致分为两类(实际上是同一枚硬币的两面):

  • Modularity - 您的软件可以分成模块并以其设计未必预期的方式重新组合的属性。
  • Compositionality - 可根据可预测的法律组合软件组件的属性。因此,如果您了解您的组件并了解组成规则,您就可以了解整个软件系统。

此外,如果您的语言是强类型语言(例如Haskell),编译器可以静态地保证您不会引入副作用并失去这些能力。

如果您的语言是total functional programming语言,那么您的语言可以甚至更少。即,这些语言不支持一般递归或无限循环。但是你可以让编译器保证你的程序不会崩溃或挂起。具有一般递归或循环的命令式语言can never give you this guarantee

答案 1 :(得分:0)

是。在纯函数式语言中,您可以说:

f (print 5)

f的参数是文字语句print 5(当然编译成可执行代码---不是字符串!)。在命令式语言中,相同的表达式执行 print 5 ---打印数字---然后传递' 结果'到f。所以这个功能:

do_three_times a = do
    a
    a
    a

这是一个非常合理的Haskell函数,可以像这样调用:

do_three_times (print 5)

三次打印数字5;但是用一种命令式的语言来说,写一个完全类似的功能是不可能的。 (你可以得到的最近的是一个零参数函数的舞蹈,这很烦人,它会阻止使用命令式语言的人使用它。)

这样做的结果是,在命令式语言中,您的结构化循环结构必须构建在语言中,因此您有一个小的,固定的列表;而在纯函数式语言中,结构化循环结构只是库函数,所以它们中有更多,你可以更自由地选择适合你程序的那个。