计算列表中元素的出现次数 - OCaml

时间:2016-09-25 00:57:11

标签: recursion ocaml

我如何计算Ocaml中列表中特定元素的出现次数?

count 2 [1;2;2;2;2;3;4;5] # should return 4

我无法弄清楚折叠是如何工作的以及我将如何应用它。我试过了:

count element list = fold (fun f ele head -> if ele = head then 1 else 0) 0 list

但是我的测试会继续返回0吗?

1 个答案:

答案 0 :(得分:1)

您的代码非常接近。原谅我,但我会假设你是OCaml的初学者。

在表达式fun f ele head -> ...中,您定义了一个名为felehead的参数的函数。我怀疑你打算将f作为该函数的名称。但是OCaml中的lambdas(函数表达式)没有名称(就像它们在JavaScript中那样)。

OCaml中没有标准函数fold。让我们假设您正在使用左侧折叠List.fold_left。要折叠的函数有两个参数:第一个是函数先前调用的累积结果,第二个是列表中的新元素。

所以你的内部功能应该更像这样:

fun accum ele -> ....

折叠函数返回新的累积结果。很明显,你不想只返回0或1.你想要返回新的计数。

我不想多说,因为我怀疑这是学校作业的一部分。我希望这会有所帮助。

(作为旁注,这个问题不是关于递归。递归是由List.fold_left为你处理的,你只需要填写函数和初始值。)