【发布时间】:2010-11-03 04:03:43
【问题描述】:
我经常听说函数式编程解决了很多过程式/命令式编程中难以解决的问题。但我也听说它不擅长处理程序编程天生擅长的其他一些问题。
在我打开关于 Haskell 的书并深入研究函数式编程之前,我想至少了解一下我真正可以将它用于什么的基本概念(除了书中的示例)。那么,函数式编程擅长什么?有哪些不适合的问题?
更新
到目前为止,我已经得到了一些很好的答案。我等不及要开始学习 Haskell 了——我只需要等到我掌握 C :)
函数式编程之所以伟大的原因:
- 非常简洁明了 - 它可以用简短、清晰的语句表达复杂的想法。
- 比命令式语言更容易验证 - 在系统中的安全性至关重要的情况下很好。
- 函数的纯粹性和数据的不变性使并发编程更加合理。
- 非常适合编写脚本和编写编译器(但我很想知道原因)。
- 数学相关的问题解决得简单又漂亮。
函数式编程难以解决的领域:
- 值得商榷:网络应用程序(虽然我猜这取决于应用程序)。
- 桌面应用程序(虽然它可能取决于语言,但 F# 会擅长这不是吗?)。
- 任何对性能至关重要的事物,例如游戏引擎。
- 任何涉及大量程序状态的事物。
【问题讨论】:
-
总和 [ x | x
-
我不明白为什么桌面应用程序会成为问题,可能除了来自 GUI 构建器工具等的较低级别的支持。 “很多程序状态”可能意义不大。在许多情况下,您可以用函数、闭包和延续的正确组合来替换看似复杂的程序状态。
-
取决于您使用的“函数式编程”的定义。您是指像 Haskell 中的纯函数式还是像 F#、OCaml、Scala、Clojure 甚至 C# 3.0 中那样提供一流的词法闭包?
-
我只是指一般的功能范式
-
我不得不不同意你的反对部分的一切。函数式编程(实际上是范式)非常适合 Web 应用程序(Haskell+Happstack/Snap/Yesod、Racket+CPS 等)。带有 FRP 的 Haskell 比我所见过的用于 GUI/桌面应用程序的任何东西都要好,它只是需要更多的开发人员来处理它。我经常为你能想象到的一切(数字运算、模拟、人工智能、图形、网络等)编写速度极快的 Haskell 程序。最后,Haskell(同样是 FRP)是维护复杂状态的最佳语言。见stackoverflow.com/q/15467925/1978898
标签: haskell functional-programming