[Haskell-beginners] Wrapping random
michael at snoyman.com
Fri Nov 28 18:44:59 EST 2008
On Fri, Nov 28, 2008 at 1:53 PM, Torsten Otto <t-otto-news at gmx.de> wrote:
> Hi all,
> I teach a high school class in Computer Science. The current programming
> goal is to implement chat-bots, and we're using Haskell of course. Now one
> of my students had the seemingly easy idea of having the bot answer with a
> random sentence if it doesn't have "good" answer.
> Random in Haskell has its problems. I understand why you can't just call a
> function as you would in Java. I'm not firm enough with monads myself (and
> certainly don't want to go there in the class beyond I/O) so I'm calling for
> help here: Is there a way to wrap the generation of random numbers so that
> for the students it works like a function?
> We have this working:
> > import System.Random
> > main =
> > do randomNumber <- randomRIO (1::Int,2)
> > print (randomAnswer randomNumber)
> > randomAnswer r
> > | (r == 1) = "Nope!"
> > | (r == 2) = "Absolutely!"
> > | otherwise = "Error!"
> Now, how can we use it for something like this:
> >findAnswer  = "h"
> >findAnswer (x:xs)
> > | (z == "unknown") = findAnswer xs
> > | otherwise = z
> > where z = findWord x lexikon
> where instead of getting "h" we'd like to call a function that would give
> us one of the strings out of randomAnswer.
> (findAnswer looks through a list [(keyword,response)].
> I've looked at realworldhaskell and the wikibook among other sources, but I
> can't manage to piece anything useful together. How do I manage to get
> something of type IO to represent itself as a String?
> Any help would be greatly appreciated.
I believe you are looking for unsafePerformIO (
I'm not sure if it will work properly for random number generation,
however,due to optimization issues.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Beginners