如何计算列表中有多少元素?

F.A*_*F.A 2 haskell list

我知道这个length功能,但如果我有一个列表,[(1,2),(2,3),(3,4)]并尝试使用length它不起作用.我试图连接,但这没有帮助.知道怎么样?

dup*_*ode 6

虽然(2 *) . length正如9000所指出的那样,对你当前问题的明智解决方案是值得关注为什么length [(1,2),(2,3),(3,4)]不做你期望的事情.Haskell列表包含任意数量的相同类型的元素.然而,Haskell对恰好有两个可能不同类型的元素,这些元素是完全不同的,并且不会隐式转换为列表(有关该点的进一步讨论,请参阅此问题).但是,没有什么能阻止我们自己编写转换函数:

pairToList :: (a, a) -> [a]
pairToList (x, y) = [x, y]
Run Code Online (Sandbox Code Playgroud)

注意,参数pairToList是类型(a, a); 也就是说,该函数只接受具有相同类型的两个元素的对.

鉴于pairToList,我们可以转换列表中的对...

GHCi> map pairToList [(1,2),(2,3),(3,4)]
[[1,2],[2,3],[3,4]]
Run Code Online (Sandbox Code Playgroud)

......然后按原计划继续进行:

GHCi> (length . concat . map pairToList) [(1,2),(2,3),(3,4)]
6
Run Code Online (Sandbox Code Playgroud)

concatMap功能结合mapconcat一次性通过......

GHCi> :t concatMap
concatMap :: Foldable t => (a -> [b]) -> t a -> [b]
Run Code Online (Sandbox Code Playgroud)

......所以你的功能变得简单:

GHCi> (length . concatMap pairToList) [(1,2),(2,3),(3,4)]
6
Run Code Online (Sandbox Code Playgroud)