Functional programming 函数式编程语言能做什么,命令式编程语言能做什么;T

Functional programming 函数式编程语言能做什么,命令式编程语言能做什么;T,functional-programming,Functional Programming,我正在上函数式编程的第一堂课。我有点不知道自己在干什么就跳进去了。但我已经了解到,函数式编程语言不同于另一类称为命令式语言的语言。我收集C和C++是后者的例子。 学习编程语言显然需要时间和精力。到目前为止,我还没有看到任何迹象表明命令式语言与函数式语言相比有任何局限性 我的问题: 函数式编程语言是否提供了使其对所有程序员都广泛有用的好处 实际上情况正好相反。函数式语言是有局限性的语言。这个限制是一个非常有价值的特性。当您使用纯函数式语言(或语言的纯函数子集)时,您将失去程序产生副作用的能力,但这

我正在上函数式编程的第一堂课。我有点不知道自己在干什么就跳进去了。但我已经了解到,函数式编程语言不同于另一类称为命令式语言的语言。我收集C和C++是后者的例子。 学习编程语言显然需要时间和精力。到目前为止,我还没有看到任何迹象表明命令式语言与函数式语言相比有任何局限性

我的问题:


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

实际上情况正好相反。函数式语言是有局限性的语言。这个限制是一个非常有价值的特性。当您使用纯函数式语言(或语言的纯函数子集)时,您将失去程序产生副作用的能力,但这在更高的抽象层次上为您提供了强大的能力:纯功能程序更容易推理,更容易组合成更大的系统。这些好处大致可分为两类(实际上是同一枚硬币的两面):

  • -您的软件可以分离为模块并以其设计不一定预期的方式重新组合的属性
  • -软件组件可以根据可预测的规律进行组合的特性。因此,如果您了解您的组件,并且了解组合法则,那么您就了解了整个软件系统
此外,如果您的语言是强类型语言(如Haskell),编译器可以静态地保证您不会引入副作用并失去这些功能


如果你的语言是一种语言,那么你的语言所能做的就更少了。也就是说,这些语言不支持一般递归或无限循环。但是您可以让编译器保证您的程序不会崩溃或挂起。具有一般递归或循环的命令式语言。

事实上,情况正好相反。函数式语言是有局限性的语言。这个限制是一个非常有价值的特性。当您使用纯函数式语言(或语言的纯函数子集)时,您将失去程序产生副作用的能力,但这在更高的抽象层次上为您提供了强大的能力:纯功能程序更容易推理,更容易组合成更大的系统。这些好处大致可分为两类(实际上是同一枚硬币的两面):

  • -您的软件可以分离为模块并以其设计不一定预期的方式重新组合的属性
  • -软件组件可以根据可预测的规律进行组合的特性。因此,如果您了解您的组件,并且了解组合法则,那么您就了解了整个软件系统
此外,如果您的语言是强类型语言(如Haskell),编译器可以静态地保证您不会引入副作用并失去这些功能


如果你的语言是一种语言,那么你的语言所能做的就更少了。也就是说,这些语言不支持一般递归或无限循环。但是您可以让编译器保证您的程序不会崩溃或挂起。具有一般递归或循环的命令式语言。

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

f (print 5)
f
的参数是literal语句
print5
(当然编译为可执行代码,而不是字符串!)。在命令式语言中,相同的表达式将执行
print5
——打印数字——然后将“结果”传递给
f
。所以这个函数:

do_three_times a = do
    a
    a
    a
这是一个非常合理的Haskell函数,可以这样调用:

do_three_times (print 5)
将数字5打印三次;但在命令式语言中,不可能编写完全类似的函数。(你能得到的最接近的是一个带有零参数函数的舞蹈,这已经够烦人了,它会阻止使用命令式语言的人使用它)


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

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

f (print 5)
f
的参数是literal语句
print5
(当然编译为可执行代码,而不是字符串!)。在命令式语言中,相同的表达式将执行
print5
——打印数字——然后将“结果”传递给
f
。所以这个函数:

do_three_times a = do
    a
    a
    a
这是一个非常合理的Haskell函数,可以这样调用:

do_three_times (print 5)
将数字5打印三次;但在命令式语言中,不可能编写完全类似的函数。(你能得到的最接近的是一个带有零参数函数的舞蹈,这已经够烦人了,它会阻止使用命令式语言的人使用它)

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

可能重复:可能重复