Haskell列表中的列表

时间:2015-04-11 18:12:11

标签: list haskell

我正在学习Haskell,我遇到了一个问题,如果给出一个字符串列表的列表,我必须在整个初始列表中找到字符串的总数。我的过程是将整个初始列表转换为一维列表并获得长度,但我似乎可以想出来。

到目前为止我所拥有的:

type Word = String
type Line = [Word]
type Page = [Line]
type Doc = [Page]
numWords :: Doc -> Line -> Word -> Int

我需要找到单词的数量,我不确定这是否是解决此类问题的最佳方法,但我不知所措。

非常感谢任何帮助。 谢谢。

1 个答案:

答案 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

请记住,类型同义词并不意味着类型实际上是不同的;你可以使用相同的功能。