我真的被困在如何解决这个问题我被要求计算列表中的否定数量,我会提交作业:
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;;
答案 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的元素然后对它们进行计数来解决它,但这需要两次迭代。