2014-02-21 134 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))