名前が示すように、次の状態を予測するために 1 つのステップを繰り返し振り返る単純なマルコフ状態空間モデルを作成しようとしています。
これは MWE のはずですが(recur ... )
、以下のコードにどのように配置すればよいのかよくわからないからではありません。
;; helper function
(defn dur-call
[S D]
(if (< 1 D)
(- D 1)
(rand-int S)))
;; helper function
(defn trans-call
[S D]
(if (< 1 D)
S
(rand-int 3)))
;; state space model
(defn test-func
[t]
(loop
[S (rand-int 3)]
(if (<= t 0)
[S (rand-int (+ S 1))]
(let [pastS (first (test-func (- t 1)))
pastD (second (test-func (- t 1)))
S (trans-call pastS pastD)]
(recur ...?)
[S (dur-call S pastD)]))))
私の目標は、ある時点で状態を計算することですt=5
。その場合、モデルは状態を振り返って計算する必要がありますt=[0 1 2 3 4]
。私の考えでは、これはうまくいくはずですが、おそらく(方法がわからない、まだClojureに慣れていない)でもloop/recur
実行できます。reduce
私の問題は、recur
内部で使用するlet
必要があるように見えることですが、設計方法を考えると機能しないはずloop/recur
です。