2016-08-24 61 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

非常感谢您的帮助...此作品... –