我正在尝试编写一个获取多个字符串输入并以空行('\ n')结尾的函数
getLines :: IO [String]
getLines = do x <- getLine
if x == ""
return ()
else do xs <- getLines
return (x:xs)
它无法编译说if语句有问题
理想情况下,我想像这样工作
getLines
苹果
鸟
猫
(按下输入)
输出:
[“苹果”,“鸟”,“猫”]
最佳答案
您需要在then
之后加上if
,并且()
(空元组)应该是[]
(空列表)。在if
中,如果then
和else
位于单独的行中,则也需要缩进,因为if then else
是运算符,并且编译器需要知道表达式会继续。您需要调整缩进量,以使所有缩进量都超过领先的do
:
getLines :: IO [String]
getLines = do x <- getLine
if x == ""
then return []
else do xs <- getLines
return (x:xs)
否则,所有内容的缩进量都要超过包含开头
do
的行:getLines :: IO [String]
getLines = do
x <- getLine
if x == ""
then return []
else do
xs <- getLines
return (x:xs)
作为样式问题,您也可以使用
null x
代替x == ""
。