2014-11-23 2 views
0

하스켈에게 매우 익숙합니다. 제 질문은 당신에게 아주 기본적인 것일 수 있습니다. 여기에 내가 간다. 특정 수학 공식을 사용하여 일련의 숫자를 만드는 프로그램을 작성 중이다. 이 시리즈를 작성한 후에는 해당 숫자에서 최대/최소값을 찾는 것과 같은 작업을 수행해야합니다. 그래서 프로그램을 작성할 수 있지만 사용자로부터 단일 입력을받은 후 내 프로그램이 출력을 표시 한 다음 종료합니다. 사용자가 명령을 더 기다려야하고 명령 END에서 종료해야하는 경우 어떻게해야합니까?하스켈 : 프로그램 실행 계속

라인 < - 나는 명령을 얻기 위해이 명령을 사용하여 다음 명령에 따라 필요한 함수를 호출하고

의 getline. 어떻게해야합니까?

답변

1

기본 입력 루프 : 각 명령 핸들러는 루프를 다시 시작 다시 loop를 호출하는 방법을

loop = do 
    putStr "Enter a command: " 
    input <- getLine 
    let ws = words input -- split into words 
    case ws of 
    ("end":_)  -> return() 
    ("add":xs:ys:_) -> do let x = read xs :: Int 
           y = read ys 
          print $ x + y 
          loop 
    ... other commands ... 
    _ -> do putStrLn "command not understood"; loop 


main = loop 

참고. "end"핸들러는 return()을 호출하여 루프를 종료합니다.

+0

감사합니다. 매력처럼 작동 .. – BW12

1

이에 대한 Prelude.interact 있습니다 :

calculate :: String -> String 
calculate input = 
    let ws = words input 
    in case ws of 
     ["add", xs, ys] -> show $ (read xs) + (read ys) 
     _ -> "Invalid command" 

main :: IO() 
main = interact calculate 

상호 작용 : (문자열 -> 문자열) -> IO() 인터랙트 함수는 인수로서 유형 현악기와> 문자열의 기능을한다 . 표준 입력 장치의 전체 입력이 인수로이 함수에 전달되고 결과 문자열이 표준 출력 장치에 출력됩니다.

관련 문제