使用模式匹配和ocaml中的递归函数在列表中的频率为0和1

时间:2015-02-11 21:54:40

标签: ocaml

for(int i<0;i<Array.size;i++)
 {
     if(Array[i]==0)
     count0++;
     else if(Array[i]==1)
     count1++;
     else
     System.out.println("not required");
 }

这是java中的代码。如何使用模式匹配和递归函数在ocaml中为列表编写?我是OCaml的新手。

1 个答案:

答案 0 :(得分:2)

对于简单折叠,您不需要使用显式递归。这是一个维持计数的函数:

let count (zeroes, ones) = function
| 0 -> (zeroes + 1, ones)
| 1 -> (zeroes, ones + 1)
| _ -> (zeroes, ones)

以下是如何将其应用于列表:

let count_list l = List.fold_left count (0, 0) l

(如果这是一个家庭作业问题,你应该在询问SO之前尝试自己解决。)