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

Count the occurrence of an element in a list- OCaml

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

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

我无法弄清楚 fold 的工作原理以及我将如何在此处应用它。我尝试这样做:

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

但是我的测试总是返回 0?

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

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

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

所以你的内部函数应该看起来更像这样:

fun accum ele -> ....

折叠函数 return 是新的 累加 结果。所以很明显你不想 return 只是 0 或 1。你想要 return 新计数。

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

(补充一句,这道题不是递归,递归由List.fold_left帮你处理,你只需要填写函数和初值即可。)