簡體   English   中英

Haskell- IO String獲得多行

[英]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之后,而() (空元組)應該是[] (空列表)。 ifthenelse需要縮進,如果它們在單獨的行上,因為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM