[英]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.