【发布时间】:2012-03-22 13:09:08
【问题描述】:
在another question 中,我询问了Java 的并发多图。
是否可以在 Scala 或 Clojure 程序中使用一些函数式编程(不可变)模式?我认为 Scala 解决方案可能会涉及演员和 clojure 一个 atom、ref 或 agent,但可能有更好的方法。由于这两种语言都允许“回退”到 Java 互操作并仅使用 Java 解决方案,因此我可以使用第一个问题得到的任何答案,但这不符合函数式编程范式。 Haskell 程序员如何解决这个问题?
【问题讨论】:
-
Haskell 不允许突变是一个常见的误解。确实如此。问题是必须在类型中适当地注明所有突变;因此,将变异操作组合在一起的典型方法是使用 monad 接口。 Haskell 可以像 Scala 和 Clojure 一样“退回”到可变性,除了在 Haskell 中你不能作弊并让它看起来像一个函数是纯的,而实际上它不是。但是,如果您可以将突变完全封装在您的函数中,那么它仍然可以暴露一个纯接口。
标签: scala clojure functional-programming