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