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
递归函数应该是简单的部分。所有你需要做的就是决定何时结束递归,然后再次调用该函数,如果该条件不成立的话。
let runGame gameData = do newGameData <- runOneIterationOfGame gameData
if gameOver newGameData then
return newGameData
else
runGame newGameData
感谢您的帮助!.....但是即时通讯寻找更多的解释,你介意一点细节描述该功能?就像我说的那样,这个新的也没有很好的理解它 – Kpholsey
@kpholsey gamedata应该保持所有的状态,哪些囚犯是有罪的,用户已经猜到了什么等runOneIterationOfGame显示关于随机3的信息,需要玩家输入等等。gameOver是一个函数,如果用户猜测正确,它将返回true。如果用户猜测正确,那么我们可以退出游戏,如果用户没有正确猜测,那么您需要通过调用runGame更新状态来运行另一次游戏迭代。无论何时你写一个递归函数寻找两件事情,递归的结束和让你离它更近一步。 – stonemetal
感谢您的帮助! – Kpholsey
到目前为止你有什么代码? Stackoverflow是一个社区来寻求帮助,而不是要求代码。 – bheklilr