直观地说,Haskell如何在不使用标准长度函数的情况下找到列表的长度?

时间:2015-12-22 18:44:29

标签: haskell

我刚开始学习Haskell并且正在尝试编写一个计算列表中元素数量的程序。我在网上找到了这个代码:

listnumber :: [Int] -> Int 
listnumber [] = 0
listnumber (x:xs) =1 + listnumber xs

在GHCi中加载后,程序按预期返回列表的长度。但是这段代码如何直观地工作?

1 个答案:

答案 0 :(得分:5)

1| listnumber :: [Int] -> Int 
2| listnumber [] = 0
3| listnumber (x:xs) =1 + listnumber xs

第一行几乎说,该函数采用一个以Int'作为参数的列表并返回一个Int。

第二行是边缘情况,意味着如果用空列表调用该函数,它将返回0.

第3行使用模式匹配来切断列表的第一个元素(x)和其余的(xs)。现在你只需为元素x添加1并再次使用列表的其余部分调用该函数(递归),这将继续执行直到它遇到边缘情况,即空列表。