int list-> int而不是'a list->'a

时间:2019-03-29 17:08:56

标签: polymorphism ocaml type-inference

我是ocaml的新手(我在学校学习),在我的练习中,我需要编写一个函数,该函数给出int列表的最小值。我写的是:

let rec minimum liste =
    match liste with
    |[a] -> a
    |[a;b] -> if a<b then a else b
    |a::b::r -> if a<b then minimum (a::r) else minimum (b::r)
    ;;

但是,ocaml告诉我:

val minimum : 'a list -> 'a = <fun>

正如我所说,我需要val minimum : int list -> int = <fun> 请问你能帮帮我吗 ?谢谢!

1 个答案:

答案 0 :(得分:2)

您的代码不执行任何取决于输入为任何特定类型的操作。因此,OCaml(或多或少正确地)推断它将适用于任何类型的列表。

如果愿意,可以通过这样指定函数参数来限制它们的类型:

 let f (x: type) = ...

所以你可以说:

let rec minimum (liste: int list) = ...

(作为附带说明,您可以在一个空列表上尝试使用函数以查看会发生什么。)

相关问题