Haskell:继续执行程序

时间:2014-11-23 21:29:05

标签: haskell flow

我对Haskell很新。我的问题可能对你来说非常基础。我走了 -

我正在编写一个程序,使用特定的数学公式创建一系列数字。在创建这个系列之后,我应该对它执行一些操作,比如找出这些数字的最大值/最小值。

我可以编写程序但是在从用户获得单个输入后,我的程序显示输出然后退出。如果我必须等待来自用户的更多命令并退出命令END,我该怎么办?

line <- getLine

我正在使用此命令获取命令,然后根据命令调用必要的函数。我该怎么办?

2 个答案:

答案 0 :(得分:1)

基本输入循环:

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

注意每个命令处理程序如何再次调用loop以重新启动循环。 &#34;结束&#34;处理程序调用{​​{1}}以退出循环。

答案 1 :(得分: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
  

interact ::(String - &gt; String) - &gt; IO() interact函数采用String-&gt; String类型的函数作为参数。标准输入设备的整个输入作为参数传递给该函数,结果字符串在标准输出设备上输出。