lim*_*ist 18 simulation functional-programming clojure
除了标题中的一般问题,
我在问这个问题,同时学习Clojure的创作者Rich Hickey如何特别试图驯服OO编程和可变状态的"偶然复杂性",例如Clojure的身份和状态分离很有意义(Hickey的ants.clj正在研究中)列表).另一个相关的领域是使用游戏的函数式编程,这些游戏通常是模拟整个地方有很多有状态的"事物"; 有一些关于FP和游戏的文章/论文,欢迎更多.
也许经验丰富的函数式程序员可以提供额外的背景和建议,如何将一个人的思维重新定位到功能风格,特别是模拟.提前致谢!
Michal的答案非常好,但我想我会添加一些其他简洁的例子,我个人认为这些例子很有帮助/有趣.
第一个是关于Lau Jenson的功能流体动力学的帖子(和代码).虽然他肯定会在这里采用可变的速度路线,但风格相当实用.我敢打赌Clojure 1.3这可以完成(主要是!)不可改变的,具有合理的性能.
接下来是在Clojure 中实现的简单Snake游戏.在一个小时左右的时间内阅读起来很容易,而且风格非常愉快和有凝聚力.
此外,一些简洁的代码(我认为!)是代码建模神经网络.Jeff Foster有一些单层感知器代码,还有一些更惯用的代码修订版.值得一看,即使你不熟悉NN.他还有一些关于流体动力学的最新文章,尽管这次是在Haskell.(第一部分和第二部分)我认为,同样有趣的是他对生命游戏(和第二部分)的实施.
最后,正如Michal在我之前提到的,Brian Carper正在Clojure中制作RPG.他最近发布了一些游戏的艺术品,所以我打赌它仍在继续;)
我喜欢使用序列库来处理大量数据; 它使用类似的抽象感觉更自然map
和reduce
,和很有趣,方便的工具juxt
,而不是简单的命令式的迭代.我发现,通过使用Clojure /功能语言重新实现众所周知且实施良好的命令式算法,您确实需要缴纳税款.
玩得开心!
我不确定我是否能够应对对问题中提出的问题进行全面分析的挑战,但我至少可以发布一些关于 FP 与游戏方面有趣的链接:
\n\nJ\xc3\xb6rg W. Mittag 在这个关于“现实世界”Haskell 编程问题的答案中提供了许多有趣的示例(包含一些有趣文章的链接——Purely Function Retrogames系列确实值得一读)。
\n\n在 Clojure 领域,Phil Hagelberg 为其关于 Clojure 编程的PeepCode截屏视频实现了一款基于文本的冒险游戏;该代码可在 GitHub 上获取。然后是 Brian Carper 的RPG 项目;还没有公开发布代码,只是不久前的一篇文章(不过,它看起来很酷,所以让我们一起向 Brian 施加压力,让其继续;-))。最后,这是一个使用 Penumbra 的简单游戏的示例(出于某种原因 - 可能与 Clojure 无关 - 我无法让它工作,但你可能会,另外附有一篇文章)。
\n\n至于模拟,学习ants.clj
是个好主意。另外,我记得在加州大学伯克利分校的编程入门课程中看到过一系列基于 SICP 的讲座(我想……?),这些讲座可以在某个地方找到(90% 是在他们的 YouTube 频道上);他们在Scheme 中进行了三场关于OOP 的讲座,我认为他们提到模拟是一个为该方法提供良好用例的领域。请注意,我对这个的记忆非常模糊,所以我很难说它对你有多大用处。