2012-07-26 39 views
0

tutorial的單子,在部分一個更復雜的副作用:隨機數,筆者提供的隨機函數的簽名如下所示:爲什麼隨機monad函數需要一個額外的參數?

random :: StdGen -> (a,StdGen) 

但隨後接着說:

這樣一個功能,在概念上是隨機函數a → b可以 寫成函數
a -> StdGen -> (b,StdGen)
其中StdGen是種子的 類型。

簽名開頭的額外a是從哪裏來的?爲什麼這種類型不像以前那樣簡單StdGen -> (a, StdGen) ???

感謝

+1

這些是兩個不同的功能。一個需要'StdGen'並返回隨機生成器的結果以及新的狀態。然後他說,「如果我們有一個隨機變異a'的函數,你會得到......」,然後是第二個簽名。 – GManNickG 2012-07-26 17:01:55

+0

哦,好吧!隨機變異的解釋清楚地表明瞭這一點。謝謝。 – drozzy 2012-07-26 17:12:26

+0

@GManNickG你可以把這個答案,我可以接受嗎? – drozzy 2012-07-31 12:35:36

回答

0

這不一樣,因爲這是他描述的兩種不同的功能。 :)

第一個需要StdGen並返回隨機生成器的結果以及新狀態。

然後他說:「所以如果我們有一個隨機變化a的函數(到b),你會得到......」然後是第二個簽名。

3

我想這意味着aa -> b參數和隨機bStdGen -> (b, StdGen)StdGen -> (a, StdGen)只會給你一個隨機a

相關問題