首页 > 解决方案 > int list -> int 而不是 'a list -> 'a

问题描述

我是 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> 你能帮帮我吗?谢谢 !

标签: polymorphismocamltype-inference

解决方案


您的代码不会做任何取决于输入是任何特定类型的事情。因此 OCaml(或多或少正确)推断它适用于任何类型的列表。

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

 let f (x: type) = ...

所以你可以说:

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

(作为旁注,您可以在一个空列表上尝试您的功能,看看会发生什么。)


推荐阅读