2016-09-25 142 views
1

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

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

在表达式fun f ele head -> ...中,您定义了一个函数,其中有三个参数,分别为f,elehead。我怀疑你打算将f作为该函数的名称。但OCaml中的lambdas(函数表达式)没有名称(例如JavaScript)。

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

所以,你的内部功能应该看起来更像是这样的:

fun accum ele -> .... 

折叠函数返回新积累结果。所以显然你不想只返回0或1.你想返回新的计数。

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

(作为边评论,这个问题是不是递归。递归是List.fold_left为您处理,您只需要填写的功能和初始值。)

相关问题