1

環境

私は現在、Clojure のモナドの実装について読んでいます: org.clojure/algo.monads

直観的には、reduce はマップに適用された state-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 をモナドとして実装する方法はありますか?

私はこれを実際に使用することは決してないことを知っています.

ありがとう!

4

2 に答える 2

1

domandあなたが求めていることは、マクロを使用して(ランタイムコード生成と評価なしで)可能だとは思いません。1 つのオプションは、状態モナドの関数m-bindm-result関数を直接使用して、目的の動作を取得することです。

于 2012-06-18T05:01:56.913 に答える
0

状態モナド自体には、リストに対する反復の概念はありません。したがって、状態モナドを使用してこれを直接行うことはできません。

reduce をエミュレートするために状態モナドを使用できますloopが、ループ自体が reduce のような動作を提供するものであり、状態モナド自体は実際には何も貢献していません。

于 2012-06-18T10:10:20.367 に答える