Clojure:使用具有状态的Java对象的能力是否违背了功能P的整体概念?

Gab*_*iMe 2 functional-programming clojure

我认为整个想法是只有NO状态的计算和没有副作用.现在,如果Clojure应用程序(或更糟糕的是,可重复使用的Clojure )可以使用和创建任何Java对象,我怎么能确定我没有副作用或状态?

Car*_*icz 6

FP是一种范式,一种概念,但不一定是教条.Clojure信任程序员就他将离开FP的位置做出深思熟虑的决定.作为交换,Clojure提供了以Java库形式提供的惊人的代码聚宝盆.这使得在Clojure中编写GUI应用程序,或者Web服务器或Java库代码所涵盖的任何内容变得相对容易和轻松.

请注意,Java"洞"并不是Clojure从FP提供的唯一逃生舱:引用和原子保持状态,Clojure提供在受控条件下更改它的功能.我认为这种实用的方法使Clojure变得有用,并且有助于使它受欢迎.

  • 我觉得你在这里夸大其词.只要你远离有状态的东西(并且很容易意识到它),一切都保证是无国籍的.因此,如果你愿意,你可以编程纯粹的FP,你只是不被迫.我不足以回答关于STM中Java代码的问题,但我猜你想要至少在dosync或http:// clojure中提到的其他机制中包含那种访问权限.org/refs. (2认同)

Ant*_*hyy 5

除了咨询文档或使用java反编译器(?)之外,您无法确定.这种能力无疑违背了函数式编程的想法,但现实世界并不是一个特别纯粹的地方,纯粹的功能性语言也无法对它产生太大的影响.在Haskell中看到所有与monad的扭曲.此外,可变状态在计算上非常强大 - 当使用可变状态实现时,许多算法变得更快且更经济.