小编mkf*_*row的帖子

如何在一个简单的猜谜游戏(Haskell)中跟踪猜测的数量

在过去的几周里,我一直在尝试独立学习Haskell.目前,我正在尝试实施一个愚蠢的小猜谜游戏,其中计算机选择一个随机数,用户试图猜测它.如果用户错了,程序会告诉用户答案更高或更低,并允许用户猜测直到他们猜对了.我已经有了它的工作,但我想添加跟踪用户每场比赛的猜测次数的能力,并在他们正确猜测后向用户报告该数字.

来自命令性的背景,自然要做的就是让每次用户猜测时都会增加一个计数器,但你不能在Haskell中真正做到这一点(至少看起来像是无状态和一切都是不变的)会阻止这种情况).

我玩弄了让getGuess和giveHints函数获取一个额外参数的想法,该参数表示到目前为止的猜测次数(让我们称之为numGuesses),并且在每次调用这些方法时,传递(numGuesses + 1).但我无法让它工作(更不用说我甚至不知道这是否有效).

我的代码如下.任何建议都会非常感激.我主要是在寻找想法,但也可以随意发布实际代码.另外,如果你发现任何令人发指的事情,我可以随时告诉我,如果我的代码糟透了,以及我如何改进它(我只在功能上编程了几个星期!)

    import System.Random
    import System.IO
    import Control.Monad

    main = do
        gen <- getStdGen
        let (ans,_) = randomR (1,100) gen :: (Int,StdGen)
        putStrLn $ "I'm thinking of a number between 1 and 100..."
        getGuess ans
        putStrLn "You guessed it in __ guesses!"
        putStr "Play again? "
        hFlush stdout
        desire <- getLine
        when ((desire !! 0) `elem` ['y','Y']) $ do
            putStrLn ""
            newStdGen
            main

    getGuess ans = do   
        putStr "Your guess? "
        hFlush stdout
        guessStr <- getLine …
Run Code Online (Sandbox Code Playgroud)

random state haskell

7
推荐指数
1
解决办法
1388
查看次数

标签 统计

haskell ×1

random ×1

state ×1