0
說我有這樣的類型之一:哈斯克爾:獲取替代型
data Cell = Empty | Full
是否哈斯克爾提供了一個簡單的方法來調用非確定性的一個或另一個這些構造的?基本上我試圖隨機調用哪個構造函數,例如[CellOfSomeType | i <- [1..somerange]]
說我有這樣的類型之一:哈斯克爾:獲取替代型
data Cell = Empty | Full
是否哈斯克爾提供了一個簡單的方法來調用非確定性的一個或另一個這些構造的?基本上我試圖隨機調用哪個構造函數,例如[CellOfSomeType | i <- [1..somerange]]
只需獲取一個隨機位,並根據該位將值設置爲Full
或Empty
。例如:
import System.Random
你似乎在談論System.Random
,但這類信息應包括在這一問題。
data Cell = Full | Empty
deriving (Eq,Ord,Show,Enum)
我推導Enum
與遠程隨機使用。現在我們要爲Random
類定義一個實例,以便您可以使用幾個公共庫生成Cell
類型的隨機值。 Random
類要求我們至少定義random
和randomR
方法。
instance Random Cell where
random g = let (a,g') = random g
val = if a then Full else Empty
in (val,g')
randomR (l,h) g = let (a,g') = randomR (fromEnum l, fromEnum h) g
in (toEnum a, g')
因爲你的類型是相同的Bool
我們就可以生成一個隨機布爾(位),然後選擇您的兩個構造中的一個。範圍隨機更麻煩一點,但我們只是在請求的下限和上限之間生成一個Int,然後獲取與Int值匹配的構造函數。
提示:'Empty'和'Full'是值,而不是你需要調用的函數(就像在OOP中一樣)。 – MasterMastic
好的,那麼如何隨機獲取其中的一個值? – zzu
使用['random'](http://hackage.haskell.org/package/random)包或其他選項。不好意思,我會提供更多的幫助,但我缺乏時間。 – MasterMastic