我正在学习Haskell,我遇到了一个问题,如果给出一个字符串列表的列表,我必须在整个初始列表中找到字符串的总数。我的过程是将整个初始列表转换为一维列表并获得长度,但我似乎可以想出来。
到目前为止我所拥有的:
type Word = String
type Line = [Word]
type Page = [Line]
type Doc = [Page]
numWords :: Doc -> Line -> Word -> Int
我需要找到单词的数量,我不确定这是否是解决此类问题的最佳方法,但我不知所措。
非常感谢任何帮助。 谢谢。
答案 0 :(得分:1)
这是一个非常简单的问题。
如果我们看一下这些类型,就会很容易:
type Word = String
type Line = [String]
type Page = [[String]]
type Doc = [[[String]]]
获得Line
的长度并不太难:
lenLine x = length x
Page
只是所有内部长度的总和:
lenPage xs = sum $ map lenLine xs
我们可以对Doc
使用相同类型的模式:
lenDoc xs = sum $ map lenPage xs
至于你的最终功能,只需使用所有其他功能:
numWords :: Doc -> Page -> Line -> Int
numWords dc pg ln = lenDoc dc + lenPage pg + lenLine ln
请记住,类型同义词并不意味着类型实际上是不同的;你可以使用相同的功能。