【问题标题】:To which kind of problem is functional programming well suited? [closed]函数式编程适合哪种问题? [关闭]
【发布时间】:2010-09-17 01:31:51
【问题描述】:

函数式编程似乎是计算机科学中的一种范式,它的呼声越来越高。

我想知道使用函数式编程方法而不是更传统的面向对象方法可以更好地解决哪种问题。

谢谢。

【问题讨论】:

  • 解决很多问题 子问题子子问题... ;)
  • 我不确定我是否会描述,尤其是从计算科学的角度来看,OO 是“更传统的”方法。 OO 起源于 60 年代后期的 Simula;在 50 年代后期与 LISP 一起使用。 Smalltalk 是第一个明确标记为“面向对象”的语言,它是在 70 年代与 ML 同时开发的,这可以被认为是第二代函数式编程语言的开始。
  • Why functional languages?的可能重复

标签: functional-programming


【解决方案1】:

函数式编程最适合大多数类型的问题,包括您通常使用面向对象编程解决的任何问题,但可能需要存储大量状态或其他副作用的问题除外。除此之外,FP 比 OOP 更优雅地处理复杂问题,因为其中很多都来自数学背景(从 lambda 演算开始)。就抽象和组合而言,您拥有更大的灵活性。具有大量设计模式的面向对象程序可以使用更多功能结构进行重构,这将允许您在没有设计模式让您编写的样板结构的情况下做同样的事情。除了数学和解析之外,FP 还被广泛应用于人工智能(尤其是 Lisp)。

【讨论】:

    【解决方案2】:

    函数式编程非常适合创建可以并行执行的程序,因为它们不鼓励使用全局状态。

    【讨论】:

      【解决方案3】:

      【讨论】:

      • 这是评论而不是曲,不是吗?
      【解决方案4】:

      函数式语言在数学和统计中被大量使用。

      【讨论】:

        【解决方案5】:

        为了进一步了解并行执行点,函数式语言往往有利于图形建模,例如光线追踪。

        【讨论】:

          【解决方案6】:

          我同意 Galwegian -

          “函数式语言在数学和统计中被大量使用。”

          但是,这些并不是唯一的用途。随着函数式编程语言变得越来越主流,您可能会开始寻找用这些语言编写的业务类/库/软件。

          【讨论】:

            【解决方案7】:

            几乎所有包含大量数学的东西。

            【讨论】:

              【解决方案8】:

              例如,函数式语言 ML 非常适合实现编译器和其他操作树的应用程序。

              【讨论】:

                【解决方案9】:

                如果您正在编写 C++ 模板,那么您就是在使用纯函数式语言。

                【讨论】:

                  【解决方案10】:

                  XSLT 是一种函数式编程语言的示例,用于对表示为 XML 的数据或文档进行转换——诚然,这是一种非常冗长且非常有限的语言。如果我没记错的话,XQuery 也是纯粹的函数式。诀窍是,在没有任何全局状态概念的情况下,它们只能在主机程序上提供数据并使用它们的结果。这有助于保持 XSLT 程序(样式表)的纯粹性和可重用性,但您需要添加某种(命令式)框架才能将它们用作通用处理系统的一部分。

                  【讨论】:

                    【解决方案11】:

                    基本的电子表格可以看作是功能程序... :)

                    【讨论】:

                      【解决方案12】:

                      数据结构。示例:将 Fibonacci Heap(通常用作优先级队列)的命令式实现与函数式实现进行比较。函数式代码通常少于 100 行代码,而命令式实现可以是更多代码行。

                      【讨论】:

                      • 快速编写。执行缓慢。
                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2010-09-16
                      • 2014-07-30
                      • 1970-01-01
                      • 1970-01-01
                      • 2010-11-04
                      • 1970-01-01
                      相关资源
                      最近更新 更多