[英]Haskell- IO String get multiple Lines
我正在嘗試編寫一個函數,它獲取多個字符串輸入並終止於空行('\\ n')我有以下內容
getLines :: IO [String]
getLines = do x <- getLine
if x == ""
return ()
else do xs <- getLines
return (x:xs)
它無法編譯說if語句有問題
理想情況下,我想這樣工作
getLines
蘋果
鳥
貓
(輸入按下)
輸出:[“Apple”,“Bird”,“Cat”]
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 == ""
。
這幾乎是正確的。
你需要一個then
你的if
。 您可能還需要稍微更改縮進,以便所有內容都縮進到x
而不是do
。 我認為這應該就是這樣做的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.