作为命令式开发人员已有多年,我从未有过学习函数式编程的冲动。
几个月前,我终于决定学习 Haskell。这是一种很酷的语言,但我对如何用这种语言编写事件驱动的真实应用程序感到困惑。你知道关于它的好的教程吗?
注意:当我说“真正的应用程序”时,我并不是在谈论现实世界中的生产就绪应用程序。我只是指一个小示例应用程序,只是为了掌握它。我认为像 Windows 计算器的简化版本这样的东西会很棒,然后也许会更复杂一些。
最佳答案
当您提到“现实世界”的示例时,您可能正在考虑本质上是顺序的或有状态的或执行大量 I/O 的问题,对吗?
那么,游戏怎么样?
- Frag是一个 Quake 克隆,为本科论文实现 ( Functional Programming and 3D Games, Mun Hon Cheong, 2005 )。 Here's a video of it in action .
- Super Monao Bros. (以前称为Super Nario Bros.),好吧,您可能会弄清楚它是哪个游戏的克隆。 (This is the author's English language weblog.)
- Purely Functional Retrogames是一个由 4 部分组成的系列博客文章,介绍如何用纯函数式语言编写游戏,以 Pacman 为例进行说明。 (Part 2、Part 3、Part 4。)
或者,X Window Manager 怎么样? ,可扩展Emacs clone text editor或 IDE ?
然后,有一本书,标题中甚至已经包含了您的问题:Real World Haskell 和,这也是 available for free !
您可能想查看的另一件事是 Functional Reactive Programming 。 (例如,它在 Frag 中使用。)FRP 的有趣之处在于它允许您从一个非常不同的角度来看待 GUI 编程问题。如果您阅读 RWH 书中的 GUI 章节,您会发现它讨论了如何像用 C 语言一样编写 GUI 应用程序,甚至更好。 FRP OTOH 允许您以一种完全不同的方式编写它,而在 C 中甚至不可能。
很多时候(我并不是说你的问题就是这种情况,但这是一种反复出现的模式)当有人说“但是 Haskell 可以在现实世界中使用吗”时,他们是什么真正的意思是“我知道如何在 C 中做到这一点,而在 Haskell 中我不能以完全相同的方式做到这一点,因此在 Haskell 中它一定是不可能的,因此 Haskell 还没有为现实世界做好准备”。但他们错过的是,可能有一种完全不同且更好的方法来解决问题。 (这就像说“Erlang 没有线程,因此不可能用于实现并发系统。”)FRP 只是一个例子。
关于haskell - 现实世界的 Haskell 编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1113226/