Haskell做while循环

Haskell做while循环

问题描述:

即时通讯Haskell新和不明白如何haskell处理递归。我几个月来一直在研究这个问题,只是不能弄明白。我的项目在几天内到期,所以我会寻求任何帮助或建议!我的项目描述是有7个“罪犯”,其中三个是“有罪”,我必须随机展示7个罪犯中的3个,告诉这三个罪犯中有多少人有罪,并询问用户是否想猜测谁是有罪的或者直到所有的猜测都正确。我已经想出了大部分其他的东西,我只是停留在如何使用递归函数从7中反复显示3个随机数,请求输入,并检查它是否正确。Haskell做while循环

好吧,看看你给我的东西,我试图做一个小函数来尝试使用递归作为循环练习之前,我把它实现到我的项目,这就是我想出了:

main = do 
    num <- 7 
    print recursion(num) 


let recursion a = do 
    putStrLn "guess my number!" 
    guess <- getLine 

    if a==guess 
     then print "good job" 
      return guess 
     else 
      recursion a 

但即时得到一些解析错误的行结束,你能告诉我什么我做错了吗? @stonemetal

+3

到目前为止你有什么代码? Stackoverflow是一个社区来寻求帮助,而不是要求代码。 – bheklilr

递归函数应该是简单的部分。所有你需要做的就是决定何时结束递归,然后再次调用该函数,如果该条件不成立的话。

let runGame gameData = do newGameData <- runOneIterationOfGame gameData 
          if gameOver newGameData then 
          return newGameData 
          else 
          runGame newGameData 
+0

感谢您的帮助!.....但是即时通讯寻找更多的解释,你介意一点细节描述该功能?就像我说的那样,这个新的也没有很好的理解它 – Kpholsey

+0

@kpholsey gamedata应该保持所有的状态,哪些囚犯是有罪的,用户已经猜到了什么等runOneIterationOfGame显示关于随机3的信息,需要玩家输入等等。gameOver是一个函数,如果用户猜测正确,它将返回true。如果用户猜测正确,那么我们可以退出游戏,如果用户没有正确猜测,那么您需要通过调用runGame更新状态来运行另一次游戏迭代。无论何时你写一个递归函数寻找两件事情,递归的结束和让你离它更近一步。 – stonemetal

+0

感谢您的帮助! – Kpholsey