2013-11-21 5 views
2

하스켈에 새로운 것이고 어떻게 haskell이 재귀를 처리하는지 이해하지 못합니다. 필자는 몇 달 동안이 작업을 해왔으며 그 사실을 이해하지 못했습니다. 내 프로젝트는 며칠 내에 끝날 것입니다. 그래서 어떤 도움이나 조언을 구하고 있습니다. 우리 프로젝트의 설명은 7 명이 "범죄자"로 3 명이 "유죄"이며 무작위로 7 명의 범죄자 중 3 명을 표시하고 3 명 중 몇 명에게 유죄를 말하고 사용자가 유죄인지 추측할지 묻습니다. 모든 것이 정확하게 추측 될 때까지 전달하십시오. 나는 그 밖의 대부분을 알아 냈다. im은 반복적 인 함수를 사용하여 7에서 3 개의 randoms을 반복적으로 표시하고, 입력을 요청하고, 해당 권한이 있는지 확인하는 방법을 고수했다.Haskell do 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

답변

1

재귀 함수는 쉬운 부분이어야합니다. 재귀를 종료 할시기를 결정한 다음 해당 조건이 참이 아닌 경우 함수를 다시 호출하기 만하면됩니다.

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