繁体   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