相关疑难解决方法(0)

在Haskell中获取随机列表项

在审查了这个SO问题后,我试图使用随机数生成器根据生成器的返回返回一个随机列表项randomIO.

完整代码:

module Randomizer where
import System.IO
import System.Random

data Action = Create | Destroy
  deriving (Enum, Eq, Show)

type History = [Action]

-- | this looks at three sets of histories, and returns an appropriate Action
type ThreeHistoryDecisionMaker = History -> History -> History -> Action

allThreeDecisionMakers :: [ThreeHistoryDecisionMaker]
allThreeDecisionMakers = [decision1, decision2, decision3, decision4, decision5]

chooseRandomDecision :: [ThreeHistoryDecisionMaker] -> Int -> Strategy3P
chooseRandomDecision = allThreeDecisionMakers !! randomIO(0,4) 
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

special_program1.hs:249:16:
    Couldn't match type ‘Action’
                  with …
Run Code Online (Sandbox Code Playgroud)

haskell

3
推荐指数
1
解决办法
2615
查看次数

如何在Haskell中生成不同的随机值?

假设我有一个这样的列表:

let list = ["random", "foo", "random", "bar", "random", "boo"]
Run Code Online (Sandbox Code Playgroud)

我想遍历一个列表并将所有“随机”元素映射到不同的随机字符串:

let newList = fmap randomize list
print newList
-- ["dasidias", "foo", "gasekir", "bar", "nabblip", "boo"]
Run Code Online (Sandbox Code Playgroud)

我的随机函数看起来像这样:

randomize :: String -> String
randomize str = 
  case str of
    "random" -> randStr
    _        -> str
  where
    randStr = take 10 $ randomRs ('a','z') $ unsafePerformIO newStdGen
Run Code Online (Sandbox Code Playgroud)

但是对于每个“随机”元素,我都会得到相同的随机字符串:

["abshasb", "foo", "abshasb", "bar", "abshasb", "boo"]
Run Code Online (Sandbox Code Playgroud)

我不知道为什么会这样,以及如何为每次出现的“随机”获得不同的随机值。

random haskell

0
推荐指数
1
解决办法
120
查看次数

标签 统计

haskell ×2

random ×1