我正在尝试编写一个简单的马尔可夫状态空间模型,顾名思义,它迭代地回顾一步来预测下一个状态。
这应该是一个 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]
。在我看来,这应该做得很好,loop/recur
但也许也可以完成reduce
(不确定如何,对 Clojure 来说还是新手)。我的问题实际上是它似乎必须在recur
内部使用,let
但考虑到设计方式,这应该不起作用loop/recur
。