首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >了解以下函数的类型

了解以下函数的类型
EN

Stack Overflow用户
提问于 2019-04-29 10:08:51
回答 1查看 65关注 0票数 1

我用OCaml编写了一个merge_sorted函数,它接受一个比较函数和两个排序列表,并将它们合并在一起。我正在尝试理解为什么这个函数的类型是

代码语言:javascript
运行
复制
('a -> 'a -> bool) -> 'a list -> 'a list -> 'a list

而不是

代码语言:javascript
运行
复制
('a -> 'a -> bool) -> 'a list

因为它只返回一个列表。下面是我的merge_sorted函数代码

代码语言:javascript
运行
复制
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;;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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)并返回一个函数。诸若此类。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55896168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档