在OCaml中找到最长的正整数

时间:2019-02-18 02:55:07

标签: ocaml

尝试对OCaml进行遍历列表的问题,并找出最长的正整数或负整数。到目前为止,我的想法是每次下一个符号与当前符号相同时,都必须使用List.fold_left并以某种方式+1累加器。但是,我对如何保存该值有些困惑。任何帮助,将不胜感激。

2 个答案:

答案 0 :(得分:0)

我怀疑您被否决了,因为这是一个基本问题,通常可以通过阅读有关OCaml或函数式编程的介绍来最好地回答。

通常折叠(尤其是CASCADE)的基本思想是在遍历集合(尤其是列表)时保持某种状态。当您说要“保存”一个值时,自然的答案是该值将成为遍历列表时所维护的状态的一部分。

用于调用delete_multiple的模板如下:

List.fold_left

更新功能获取当前状态和列表的下一个元素,并返回下一个状态的值。所以看起来像这样:

List.fold_left

因此,对您的问题的明确回答是,更新功能(您“折叠”在列表上的功能)将通过将值作为新状态的一部分返回来保存该值。

这里有一些代码返回列表中看到的最大非负整数:

let final_state =
    List.fold_left update_function initial_state list

此代码通过将其返回为更新函数的值来“保存”迄今为止最大的int。 (请注意,它为空列表返回的值为0。)

答案 1 :(得分:0)

啊当晚也整晚都在做OCaml大声笑! 这是我的看法...一种方法是对列表进行排序,然后根据您的排序方式找到第一个肯定的或第一个否定的...从https://caml.inria.fr/pub/docs/manual-ocaml/libref/List.html中签出排序函数...这样就很容易获得大小。

假设您不想使用此内置库...此代码应该已经可以使用了(如果我的编辑器/调试器与OCaml一起使用,我会进行进一步测试,但我认为这已经很不错了)< / p>

$array[$i]['fund'];