在via org.clojure / algo.monads中实现Reduce作为Monadic Map

时间:2012-06-17 23:38:07

标签: clojure monads

上下文

我目前正在阅读Clojure的monads实现:org.clojure / algo.monads

直观地说,reduce看起来像应用于地图的状态m。基本上,到目前为止,“状态”是值。

现在,我无法以“标准方式”开展这项工作,因为:“

(domonad state-m
   [ ... I can only stuff a constant number of things here ...
     ... but I need to stuff here a list whose size is only known at run time ... ]
    ..)

问题

有没有办法使用state-m实现reduce作为monad?

我知道在实践中我永远不会使用它,这纯粹是为了启蒙+更好地理解事物如何融合在一起。

谢谢!

2 个答案:

答案 0 :(得分:1)

我不认为使用domand宏可以提出要求(没有运行时代码生成和评估它)。一种选择是直接使用状态monad的m-bindm-result函数来获得所需的行为。

答案 1 :(得分:0)

状态monad本身没有任何迭代概念。因此,您无法使用状态monad直接执行此操作。

你可以在loop中使用状态monad来模拟reduce - 但是循环本身就是提供类似reduce的行为,状态monad本身并不会真正贡献任何东西。

相关问题