如何在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));;