[英]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(可以是Text
和Section
秒)。
您可以匹配任何列表,然后必須通過為每個子項生成String
列表並將它們連接起來來處理該列表,因此:
tex :: Article -> [String]
tex (Text x) = [x]
tex (Section _ ls) = … ls
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.