2016-08-24 62 views
1

我對Haskell來說是全新的。我正在編寫代碼來接受一系列值。讀取連續輸入終止條件

eg. 
1 2 
3 4 
0 0 

當輸入停止,我應該顯示值1 2 3 4

我也做了以下內容,但它不工作中的最後一個條件。我需要一些幫助。

main = myLoop 

myLoop = do inp <- getLine 
      if (inp == "0 0") then 
       putStrLn "END" 
      else do putStrLn(inp) 
         myLoop 
+3

你應該解釋一下你的意思是 「這是行不通的。」你有編譯錯誤嗎? – ErikR

+0

不,我沒有收到編譯錯誤。我找不到任何方法來做到這一點。你能幫我麼? –

+2

然後你用你的示例輸入文件得到了什麼輸出?你想要什麼輸出?當我運行你的程序時,我得到3行輸出:第一行是'1 2',第二行是'3 4',第三行是'END'。 – ErikR

回答

4

首先,確保你沒有在你的源代碼中使用製表符。爲了讓你的榜樣工作,我不得不排隊putStrLnmyLoop這樣的:

myLoop = do inp <- getLine 
      if (inp == "0 0") then 
       putStrLn "END" 
      else do putStrLn(inp) 
        myLoop 
       -- ^note putStrLn and myLoop are at the same column 

其次,我會回答這個問題假設你想在數/單詞表來讀取。

readNums :: IO [String] 
readNums = do 
    x <- getLine 
    if x == "0 0" 
    then return [] 
    else do xs <- readNums 
      return (words x ++ xs) 

用法示例:

main = do nums <- readNums 
      print nums 
+0

謝謝......但輸出在哪裏。我沒有看到任何東西... –

+1

添加示例用法。你得到一個清單,所以你可以做任何你想要的。 – ErikR

+0

非常感謝您的幫助...此作品... –