我目前正在阅读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?
我知道在实践中我永远不会使用它,这纯粹是为了启蒙+更好地理解事物如何融合在一起。
谢谢!
答案 0 :(得分:1)
我不认为使用domand
宏可以提出要求(没有运行时代码生成和评估它)。一种选择是直接使用状态monad的m-bind
和m-result
函数来获得所需的行为。
答案 1 :(得分:0)
状态monad本身没有任何迭代概念。因此,您无法使用状态monad直接执行此操作。
你可以在loop
中使用状态monad来模拟reduce - 但是循环本身就是提供类似reduce的行为,状态monad本身并不会真正贡献任何东西。