0

我在网上找到了这段代码,但它没有运行。

main = do
 xs <- getLine []
print xs

那么如何在 Haskell 中向用户询问列表输入呢?我是Haskell的新手,请在回答时解释一下。谢谢。

4

2 回答 2

2

你这样做,例如:

main :: IO ()
main = do
  xs <- getLine
  let { ints :: [Int] 
      ; ints = read xs 
      }
  print $ take 2 ints
  

并且您必须以有效的列表语法输入输入,例如

[1,2,3]

请注意,do-block 中的每一行必须以相同的缩进级别开始(除非使用显式分隔符{ ; })。

于 2019-03-26T18:45:56.840 回答
1

getLine是一个IO产生字符串的动作,没有别的。收到该字符串后,您需要对其进行处理。例如,下面是一个IO将适当的输入解析为Int值列表的操作。

getIntList :: IO [Int]
getIntList = fmap read getLine

main = do
         ints <- getIntList
         print ints

有一个Read列表实例,因此以下工作:

> read "[1,2,3]" :: [Int]
[1,2,3]

getIntList使用Functor实例 forIO应用于将产生read的字符串getLineread的具体类型将从给定的类型中推断出来getIntList: since getIntList :: IO [Int], then fmap read :: IO String -> IO [Int], soread :: String -> [Int]将被使用。

于 2019-03-26T18:28:00.207 回答