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

Recursion 计算列表中元素的出现次数-OCaml,recursion,ocaml,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?您的代码非常接近。请原谅,但我认为您是OCaml的初学者 在表达式fun f ele-head->…中,您

如何计算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?

您的代码非常接近。请原谅,但我认为您是OCaml的初学者

在表达式
fun f ele-head->…
中,您定义了一个具有三个参数的函数,分别命名为
f
ele
head
。我怀疑您打算用
f
作为函数的名称。但是OCaml中的lambdas(函数表达式)没有名称(比如JavaScript)

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

因此,您的内部功能应该更像这样:

fun accum ele -> ....
折叠函数返回新的累积结果。很明显,你不想只返回0或1。您想返回新的计数

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

(作为旁注,这个问题与递归无关。递归由
列表为您处理。向左折叠
,您只需填写函数和初始值即可。)