Types 了解以下函数的类型
我在OCaml中编写了一个merge_排序函数,它接受一个比较函数和两个排序列表,并将它们合并在一起。我试图理解为什么这个函数的类型是Types 了解以下函数的类型,types,ocaml,Types,Ocaml,我在OCaml中编写了一个merge_排序函数,它接受一个比较函数和两个排序列表,并将它们合并在一起。我试图理解为什么这个函数的类型是 ('a -> 'a -> bool) -> 'a list -> 'a list -> 'a list 而不是 ('a -> 'a -> bool) -> 'a list 因为它只返回一个列表。下面是我的merge_sorted函数代码 let rec merge_sorted lt a b = ma
('a -> 'a -> bool) -> 'a list -> 'a list -> 'a list
而不是
('a -> 'a -> bool) -> 'a list
因为它只返回一个列表。下面是我的merge_sorted函数代码
let rec merge_sorted lt a b =
match a with
| [] -> b
| h::t -> match b with
| []-> a
| hh::tt -> if (lt h hh)
then h::merge_sorted lt t b
else hh::merge_sorted lt a tt;;
该函数接受三种类型的参数,即
'a->'a->bool
,'a list
,和'a list
。它返回列表类型的值。函数的类型(当以您的当前形式定义时)由参数类型组成,由->
分隔,后跟返回类型
因此,类型实际上是('a->'a->bool)->'a list->'a list->'a list
。前两个列表是第二个和第三个参数类型。最后一个列表是返回类型
这不仅仅是一个符号惯例。您的函数实际上接受一个比较函数(类型为'a->'a->bool
),并返回一个包含两个参数的函数。返回的函数接受列表(类型为'a list
)并返回函数。等等