2014-12-03 96 views
2

Haskell程序員在提到非確定性時意味着什麼?我讀過這個列表monads可以用於模型非確定性,但是確定列表不是確定性的嗎?對非確定性建模意味着什麼?據我所知,這只是意味着爲一組計算返回一組所有可能的結果。Haskell中的非確定性是什麼?

+0

[這太問題(http://stackoverflow.com/questions/20638893/how-can-non-determinism-be-modeled-with-a-list-monad)可能會有所幫助。 – ErikR 2014-12-03 07:52:20

回答

4

你的理解是正確的。列表monad捕獲的非確定性確實涉及可以返回多個可能結果的計算(函數)。

也就是說,計算f該不確定地從B類型的輸入計算A類型的輸出然後在通過使用帶A類型的值來列表B類型的值的的函數表示的Haskell:

f :: A -> [B] 

然後,如果我們也有計算g該-也從B類型的輸入不確定地-計算C類型的輸出,

g :: B -> [C] 

我們可以撰寫這些計算以獲得組合計算h這需要A類型的輸入以C類型的輸出:

h :: A -> [C] 

在Haskell,定義這樣的功能h包括應用所述函數g到每應用f x的可能結果,然後將由此獲得的列表可能結果的列表展平爲h

h x = concat zs where zs = concat [g y | y <- f x] 

正是這種成分是通過列表單子拍攝,讓你寫:

h x = f x >>= g 

甚至

h = f >=> g 
+1

非常感謝。其他地方我沒有這麼清楚地解釋過。 – andro 2014-12-03 09:17:21