我用OCaml编写了一个merge_sorted函数,它接受一个比较函数和两个排序列表,并将它们合并在一起。我正在尝试理解为什么这个函数的类型是
('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;;
发布于 2019-04-29 10:19:51
该函数接受'a -> 'a -> bool
、'a list
和'a list
类型的三个参数。它返回一个'a list
类型的值。函数的类型(按照您的格式定义时)由参数类型组成,参数类型由->
分隔,后跟返回类型。
因此,类型实际上是('a -> 'a -> bool) -> 'a list -> 'a list -> 'a list
。前两个'a list
是第二个和第三个参数类型。最后一个'a list
是返回类型。
这不仅仅是一个符号约定。您的函数实际上接受一个比较函数(类型为'a -> 'a -> bool
),并返回一个具有两个参数的函数。返回的函数接受一个列表(类型为'a list
)并返回一个函数。诸若此类。
https://stackoverflow.com/questions/55896168
复制相似问题