0

我真的被困在如何去做这件事上,我被要求计算列表中否定的数量,我会提交作业:

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

但它不是“int list -> int”,而是“int list”

所以我开始了这个,但我一生都无法弄清楚如何匹配它:

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

1 回答 1

3

您不想过滤列表。你想把它折叠成一个整数。调用也有错误的参数。

# 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]

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

于 2013-10-25T03:21:43.203 回答