
Hi John,
regarding the first problem, just provide the type of your range explicitly:
nim = do
let range = (1,10) :: (Int,Int)
x <- getStdRandom $ randomR range
y <- getStdRandom $ randomR range
z <- getStdRandom $ randomR range
return [x,y,z]
This is because the annoying monomorphism restriction, which will most
likely be reduced in the next version of Haskell.
You can also disable this restriction:
{-# LANGUAGE NoMonomorphismRestriction #-}
import System.Random
nim = do
let range = (1,10) -- no explicit type annotation needed anymore
x <- getStdRandom $ randomR range
y <- getStdRandom $ randomR range
z <- getStdRandom $ randomR range
return [x,y,z]
Cheers,
Peter
On Sun, Oct 25, 2009 at 7:57 PM, John Moore
Hi All, I'm attempting to write a program for the game nim.(The game of Nim is played with two players and several piles of stones. On each move a player removes as many stones as they would like but form only one pile. The player who takes the last stone wins) It not as simple as I first thought. Here is my basic starting points. Any comments would be greatly appreciated. I not well versed in Haskell yet so simple(basic) Haskell rather than well written haskell if you understand what I mean. Complicated monads are way out of my league.
1) I first get the program to give me three random piles by doing nim = do x <- getStdRandom $ randomR (1,10) y <- getStdRandom $ randomR (1,10) z <- getStdRandom $ randomR (1,10) return [x,y,z] Cant get this to work! 2) Now I need to get the program to ask for a number and which pile to remove the number from. This is tricky I thought about asking to find the elementAt elementAt :: [a] -> Int -> a elementAt list i = list !! (i-1) put this in a variable then asking the palyer how many to take away. and then subtracting the number from and then putting it back into the list but this seem impossible. Then the second player would do the same. 3) Finally we would end up with a case statement like f x = in case of x [0,0,1]-> You win [0,1,0]-> You win [0,0,1]-> You win [_,_,_]-> keep playing.
Lets know what you think please, getting confused.
John _______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners