【问题标题】:OCaml count the negativesOCaml 统计负数
【发布时间】:2022-04-13 01:10:22
【问题描述】:

我真的不知道该怎么做,我被要求计算列表中否定的数量,我会提交作业:

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;;

【问题讨论】:

    标签: functional-programming ocaml


    【解决方案1】:

    您不想过滤列表。你想折叠它到一个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 的元素然后对它们进行计数来解决它,但这需要两次迭代。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-14
      • 1970-01-01
      • 2017-03-23
      • 1970-01-01
      • 2019-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多