【发布时间】:2021-02-12 23:44:24
【问题描述】:
我正在制作一个函数,它返回给定数字在 int 列表中出现的次数。我有一个解决方案,但我觉得它相当初级,可以做得更好(也许用 match 和 rec??)。我也觉得样式不对,但还不太清楚如何设置 OCaml 样式。
代码如下:
let num_occurs (n : int) (nums : int list) : int =
let x = List.fold_left (+) 0
(List.filter (fun (x : int) ->
if x = n then true else false) nums) in
x / n ;;
【问题讨论】:
-
我发现我的解决方案存在潜在问题。如果用户输入 0 作为要计数的 int,这将不起作用。我将继续研究使用匹配的解决方案。
-
为什么最后要申请x/n?似乎您是在将计数除以数字本身...
-
不管怎样,正确的做法可能就是 List.length (List.filter (fun x -> x = n) nums) ——或者类似的东西,我懒得拉开终端检查语法是否正确
-
啊,有道理,是的。我明白你现在在想什么,这是合理的,但可以简化:)
-
简短评论:
if x = n then true else false就是x = n,因为这将返回true或false
标签: ocaml higher-order-functions