在OCaml中查找正整数的最长运行时间

在OCaml中查找正整数的最长运行时间,ocaml,Ocaml,尝试一个OCaml问题,迭代列表并查找最长的正整数或负整数。到目前为止,我的想法是,每次下一个符号与当前符号相同时,都必须使用List.fold_left并以某种方式向累加器添加+1。然而,我有点被困在如何保存该值上。任何帮助都将不胜感激 我怀疑你被否决了,因为这是一个基本问题,最好看一下OCaml或函数式编程的介绍 折叠的基本思想是在遍历集合(特别是列表)时保持某种状态。当您说要“保存”一个值时,自然的答案是该值将是您在遍历列表时保持的状态的一部分 调用List.fold_left的模板如下所

尝试一个OCaml问题,迭代列表并查找最长的正整数或负整数。到目前为止,我的想法是,每次下一个符号与当前符号相同时,都必须使用List.fold_left并以某种方式向累加器添加+1。然而,我有点被困在如何保存该值上。任何帮助都将不胜感激

我怀疑你被否决了,因为这是一个基本问题,最好看一下OCaml或函数式编程的介绍

折叠的基本思想是在遍历集合(特别是列表)时保持某种状态。当您说要“保存”一个值时,自然的答案是该值将是您在遍历列表时保持的状态的一部分

调用
List.fold_left
的模板如下所示:

let final_state =
    List.fold_left update_function initial_state list
let update_function old_state list_element =
    let new_state =
        (* compute based on old state and element *)
    in
    new_state
update函数获取列表的当前状态和下一个元素,并返回下一个状态的值。看起来是这样的:

let final_state =
    List.fold_left update_function initial_state list
let update_function old_state list_element =
    let new_state =
        (* compute based on old state and element *)
    in
    new_state
因此,您的问题的明确答案是,您的更新函数(您“折叠”列表的函数)将通过将值作为新状态的一部分返回来保存值

下面是一些返回列表中最大非负整数的代码:

let largest_int list =
    let update largest_so_far element =
        max largest_so_far element
    in
    List.fold_left update 0 list

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

阿当我也整夜都在做OCaml LOL!!! 这是我的机会。。。一种方法是对列表进行排序,然后根据排序方式找到第一个正数或第一个负数。。。签出排序功能来自。。。那么很容易得到尺寸

假设您不想使用此内置库。。。这段代码应该接近正常工作(如果我的编辑器/调试器使用OCaml,我会进一步测试,但我认为这接近正常工作)


我认为您不应该在这里使用List.fold_,它只会降低代码的可读性,我认为带累加器的常规递归函数会更好