OCaml计算负数

时间:2013-10-25 03:07:51

标签: functional-programming ocaml

我真的被困在如何解决这个问题我被要求计算列表中的否定数量,我会提交作业:

   let nneg = [4; 9; -5; 0; -5; 1];;
   List.filter nneg (fun-> (-))
   List.filter nneg (fun x -> x < 0)

但它不是“int list - &gt; int”而是“int list”

所以我开始这个,但我无法弄清楚我的生活如何模式匹配它:

   let rec rev nneg = match nneg with | [] -> 0 | head::tail ->(filter  tail<0) head;;

1 个答案:

答案 0 :(得分:3)

您不想过滤列表。你想折叠它到一个int。调用也有错误的论点。

# List.filter;;
- : ('a -> bool) -> 'a list -> 'a list = <fun>

所以filter是一个函数,它接受一个返回bool和列表的函数。过滤器返回过滤列表。过滤器的示例用法:

# List.filter (fun x -> x > 0) [1;2;3;-3];;
- : int list = [1; 2; 3]

由于这是一项任务,我只是给你一个提示。看看折叠函数here。显然,您可以通过过滤所有大于或等于0的元素然后对它们进行计数来解决它,但这需要两次迭代。

相关问题