如何在ocaml中编写一个函数来查找类型编号列表中的最大编号?

如何在ocaml中编写一个函数来查找类型编号列表中的最大编号?,ocaml,Ocaml,如何编写从数值列表(如果存在)返回最大数值的函数。如果给它一个空列表,那么它不能返回一个数字 我得到: let rec max_number_list l = match l with |[] -> None |x::_ -> x |x::xs -> max x (max_number_list xs) 我收到以下错误“此表达式的类型为number,但表达式的类型应为int” idk如何获取输入号码列表并返回输出号码选项。我看不出您提到的错误

如何编写从数值列表(如果存在)返回最大数值的函数。如果给它一个空列表,那么它不能返回一个数字

我得到:

let rec max_number_list l =
    match l with 
    |[] -> None
    |x::_ -> x
    |x::xs -> max x (max_number_list xs)
我收到以下错误“此表达式的类型为number,但表达式的类型应为int”
idk如何获取输入号码列表并返回输出号码选项。

我看不出您提到的错误的原因。事实上,此代码(如果更正)可以应用于任何列表,因为
max
适用于任何OCaml类型

除此之外,您的代码还有类型错误。下面是几个值得思考的问题:

  • 第一个案例返回
    None
    ,但第二个案例返回输入列表中的值。如果你想要一个数字列表,这是行不通的。类型不一样

  • max
    应用于列表的元素和递归调用的返回值。在这里,类型也不匹配。列表元素是数字,但函数返回选项类型

  • 这看起来像是一项任务,所以我不想再说更多了。这可能会破坏它的意义。

    给你:

    解释:
    1.使用“Failwith”,这可能会引发给定字符串的异常失败。并且不会导致类型错误

    2.您可以定义一个助手函数,该函数应该是尾部递归的

    我还建议使用以下代码:

    List.fold <mylist> ~init:None ~f:(fun acc x -> if is_none acc then Some x else Some ( max (Option.value acc ~default:0) x));;
    
    List.fold~init:None~f:(fun acc x->if is_None acc然后Some x其他Some(max(Option.value acc~default:0)x));;
    
    List.fold <mylist> ~init:None ~f:(fun acc x -> if is_none acc then Some x else Some ( max (Option.value acc ~default:0) x));;