我尝试将随机生成的骰子值存储在一些数据结构中,但不知道如何在Haskell中确切地做到这一点。到目前为止,我只能生成随机整数,但我希望能够将它们与相应的颜色值进行比较,并存储颜色(不能真正想象函数会是什么样子)。这是我的代码--
module Main where
import System.IO
import System.Random
import Data.List
diceColor = [("Black",1),("Green",2),("Purple",3),("Red",4),("White",5),("Yellow",6)]
diceRoll = []
rand :: Int -> [Int] -> IO ()
rand n rlst = do
num <- randomRIO (1::Int, 6)
if n == 0
then printList rlst -- here is where I need to do something to store the values
else rand (n-1) (num:rlst)
printList x = putStrLn (show (sort x))
--matchColor x = doSomething()
main :: IO ()
main = do
--hSetBuffering stdin LineBuffering
putStrLn "roll, keep, score?"
cmd <- getLine
doYahtzee cmd
--rand (read cmd) []
doYahtzee :: String -> IO ()
doYahtzee cmd = do
if cmd == "roll"
then do rand 5 []
else putStrLn "Whatever"在此之后,我想让用户能够保持相同的骰子(就像它的累积点),并让他们选择在骰子上重新滚动左边的骰子-我认为这可以通过遍历数据结构(带有骰子值)并将重复的骰子计数为点并将其存储在另一个数据结构中来实现。如果用户选择重新滚动,他必须能够再次调用随机数并替换原始数据结构中的值。
我来自OOP背景,而Haskell对我来说是一个新领域。非常感谢您的帮助。
发布于 2012-03-06 18:31:48
首先想到的是:
rand :: Int -> IO [Int]
rand n = mapM id (take n (repeat (randomRIO (1::Int, 6))))尽管haskeller可以删除括号
https://stackoverflow.com/questions/9581521
复制相似问题