2014-02-21 95 views
1

我写了下面这段随机游走的代码,它从{-1,1}中绘制随机值。在Clojure中随机游走

(defn notahappyfoo [n] 
(reverse (butlast (butlast (reverse (interleave (take n (iterate rand (- 0 1)))(take n (iterate rand 1)))))))) 

但是,代码无法生成令人满意的散步。主要问题源于函数rand。它的下界是0,这迫使我写的尴尬代码。也就是说,函数交错结束了,因为值被强制从正向负向摆动,导致漫步。使用此代码很难获得连续路径的任何意义。

我相信在Clojure中应该有一个优雅的形式来构造这个散步。但我无法将正确的功能组合在一起来产生这种散步。我期望构造的函数的目标包括随机数的下限和上限。在上面的代码中,我已经强制间隔-1到1.将它概括为-a和a将会很好。而且,如何在-a和a之间形成一个随机实数(浮点数)集合,这个集合有一些连续性的概念?

回答

5

你需要一个随机函数将范围

(defn myrand [a b] 
    (+ a (rand (- b a)))) 

然后,您可以创建一个序列

(def s (repeatedly #(myrand -1 1))) 

终于可以用减少获得样品步行

(take 10 s) 

(reductions + (take 10 s))