簡體   English   中英

Haskell - 來自數組的自定義數據結構

[英]Haskell-Custom data structure from an array

我需要一些關於如何在我編寫的代碼中僅列出Text分支中的單詞的建議。

data Article = Text String
             | Section String [Article] deriving (Show)

myArticle :: Article
myArticle = Section "Document" [
                 Section "Introduction" [
                       Text "My intoduction",
                       Section "Notation" [Text "alpha beta gamma"]],
                 Section "Methods" [
                       Section "Functional Programming" [Text "FPR"],
                       Section "Logical Programming" [Text "LPR"]],
                 Section "Results" [Text "All is great"]]

tex :: Article -> [String]
tex (Text x) = [x]
tex (Section x (l:ls)) = tex l

我試圖在tex function 中調用 ls,但它拋出了一個錯誤。 我不知道如何進行。

您正在尋找concatMap function 這將在輸入列表的每個元素上運行您給它的 function,並將所有結果連接到一個列表中。 此外,您不需要使用:來綁定列表,除非您真的想將它分成頭部和尾部(在您的情況下,您不需要)。 因此,將代碼的最后一行更改為:

tex (Section x ls) = concatMap tex ls

然后tex myArticle將是["My intoduction","alpha beta gamma","FPR","LPR","All is great"]

您使用(l:ls)進行模式匹配,這意味着它是一個非空列表,並且您只使用l ,因此第一項,您“忽略” Article的 rest(可以是TextSection秒)。

您可以匹配任何列表,然后必須通過為每個子項生成String列表並將它們連接起來來處理該列表,因此:

tex :: Article -> [String]
tex (Text x) = [x]
tex (Section _ ls) = … ls

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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