我刚刚开始学习Haskell,并且正在尝试编写一个计算列表中元素数量的程序.我在网上找到了这个代码:
listnumber :: [Int] -> Int listnumber [] = 0 listnumber (x:xs) =1 + listnumber xs
在GHCi中加载后,程序按预期返回列表的长度.但是这段代码如何直观地工作?
1| listnumber :: [Int] -> Int 2| listnumber [] = 0 3| listnumber (x:xs) =1 + listnumber xs
第一行几乎说,该函数采用Int作为参数的列表并返回Int.
第二行是边缘情况,意味着如果使用空列表调用该函数,它将返回0.
第3行使用模式匹配来切断x
列表的第一个元素()和其余的(xs
).现在你只需为元素添加1 x
并再次使用列表的其余部分再次调用函数(递归),这将持续到它遇到边缘情况,即空列表.