Haskell与现实世界中的程序编程

and*_*vig 44 haskell functional-programming imperative-programming

这些天我正在认真学习函数式编程.

虽然我对Haskell以及它似乎提供的可能性感到非常兴奋,但我现在也可以看到它需要一段时间来学习.在如何学习Haskell的SO问题中,一个答案表明,实际上"掌握"它需要几个月甚至几年.

现在,我知道C,PHP,一些面向对象的东西等等.并且被告知Haskell在"现实世界"中没有被广泛使用,我会更好地提高我所熟悉的常规语言的技能吗?哈斯克尔值得奋斗吗?

在这个问题上为什么人们认为函数式编程会得出结论似乎是函数式编程将"流行".但是程序编程肯定会保持领先,对吧?

编辑:keparo很好地澄清了我的问题:与过程语言相反,研究Haskell和函数式编程范例对我来说是否有价值?

Ray*_*yne 52

Haskell并不像人们想要学习那么难.Haskell打开了一个你从未知道的新世界.学习它和任何其他语言一样有价值.您可能找不到要求您进行Haskell编程的工作,但这是否真的意味着语言没有价值?

Haskell会教你很多新东西,它会告诉你如何用你/做/用的语言更好地编程.您可以在业余时间使用它来完成自己的个人项目.

如果将"现实世界"定义为"现金生成器",Haskell在"现实世界"中的用处并不多.因此,如果这是您的目标,那么您可能需要重新考虑目标:p

另外,我真的不喜欢那部分选择"如何学习haskell"的答案.掌握任何语言需要几个月到几年,而不仅仅是Haskell.取决于您如何定义"主".我可以使用Haskell达到相当高的效率,而且我只学习了一个月,而且我一直在慢慢地学习它.

  • +1我认为C++基础知识(包括STL的有效使用)比Haskell基础知识更难掌握. (25认同)
  • "需要多年",这取决于你所移动的语言是否属于同一范式.OOP到OOP匹配,只是学习语法.OOP到FOP学习语法,思维模式和范式转换. (3认同)
  • +1“并不像人们说的那么难”。有时,如果哈斯克尔至少没有范畴论学位,听起来好像没人能理解哈斯克尔,但事实并非如此。然后,来吧,说实话:许多类别的东西实际上是相当简单(但基本)的概念。只是他们的名字很复杂。 (2认同)

ane*_*eal 19

如果不出意外,学习Haskell提供的思维方式的改变将在您必须回到使用仍在工作场所中使用的那些程序语言时帮助您.

功能范例开始进入各种主流应用程序和语言 - 甚至C++也将在C++ 0x中添加一个(残缺的)lambda.

您可能还想查看一些混合语言,如Scala或OCaml.Scala正在Twitter上使用,而OCaml正在Jane's Street的金融交易平台上使用.

  • 在 C++ 中,元模板编程是一种纯函数式语言,这就是吸引我首先转向 Haskell 的原因。 (2认同)

kep*_*aro 10

你可能不应该期望在专业环境中使用Haskell几乎与C系列语言一样频繁.如果问题是对你研究Haskell和函数式编程范例是否有价值,答案是肯定的.您可以将对编程的丰富理解应用到您的所有工作中.


And*_*rew 8

我学习了Haskell,因为它是迄今为止我用Scala,Clojure,OCaml和Scheme尝试过的最好的函数式语言,但我并没有真正期望将它用于工作.

事实证明,对于那些对团队来说太小而且在Java中过于耗时的奇怪工作来说,它是完美的.到目前为止,我已经将它用于ad-hoc数据迁移,即将CSV导出转换为另一种格式,XML的批量转换(HXT比XSLT更简洁,更强大),屏幕抓取互联网和软件项目估算,包括建模风险使用概率monad并使用回溯产生最佳甘特图.这都是需要做的真正工作,我甚至不愿意尝试用Java做,因为这将是一项多日工作.

我现在使用它而不是Excel来进行任何模糊的数学运算,因为在文本编辑器中创建haskell源中的值列表比在Excel中键入值更加努力.一旦进入haskell,我就可以做各种各样的魔法,比如Excel不能做的回溯,概率分布等.如果我需要图表,那么我将值吐出为CSV(2行代码)并将它们加载到Excel中.

唯一的缺点是需要几个月才能熟练,但值得努力恕我直言.

  • 我也将 Haskell 用于这样一种工具:我必须从我们的应用程序日志中提取和分析错误消息,并生成要加载到 Excel 中的统计信息(输出为 CSV)。我花了一两天时间来写。在 Java 或 C++ 中,至少需要三四天。我还没有在更大的项目中尝试过 Haskell,但我想给它一个机会。 (2认同)

Don*_*art 7

与过程语言相反,研究Haskell和函数式编程范例对我来说是否有价值?

如果拥有扩展的技能组合是有价值的,那么:是的.

您可能会获得的一个优势:并行和并发编程.过去的程序语言往往没有明确的副作用概念,因此在其中编写并行程序很难正确执行.功能语言(特别是那些限制像Haskell这样的副作用的语言)对于高效的并行编程有更多的说法.

拥有这种技能不会伤害你.


Pet*_*ter 5

我可以看到,如果非功能性代码非常容易使用,那么函数式编程在生产环境中可能是一个优势.当我们想出F#时,MS也可以看到它.

由于它们都编译为IL,因此您可以处理要求功能方法功能的问题,并在程序代码中非常轻松地使用这些解决方案.

通过这种方式,功能代码可以轻松地在生产环境中一次找到它的方式

因此,既然MS的用户群很大,我的猜测是如果F#在不久的将来不会流行,那么Haskell也不会.


Cur*_*son 5

与过程语言相反,学习 Haskell 和函数式编程范式对我来说是否有价值?

除非你想痛苦,否则不会。Luke Plant 在为什么学习 Haskell/Python 会让你成为一个更糟糕的程序员中说

因此,学习 Python 和 Haskell 使我士气低落,并鼓励我编写奇怪且难以理解的代码......

(这不完全是个玩笑。)


Dar*_*rio 5

我认为这值得斗争.它将帮助您了解问题是如何解决的,而不仅仅是计算机的工作原理.

也许一个特殊的问题是Haskell本身 - 作为一种纯粹的功能性语言,它有点"硬核",另一方面可能使事情复杂化.

相反,函数式编程可能非常实用 - 许多OO /命令式语言现在已经包含了功能元素(Linq,匿名函数,只读值,函数指针/委托,类型推理):你可以专注于什么应该做的,它允许你用更少的代码表达更多(更容易出错).

像Scala或F#这样的非纯函数式语言(标准函数式语言)可以轻松集成到现有的Java或.NET项目中,因此您可以将这两种范例的优势结合起来.有关函数式语言的典型优点,请参阅此主题.想想非常强大的解析(Monadic解析器组合器/ Parsec)或函数式语言可能的并发编程,你会发现它们是多么有用.