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