我如何编写具有以下OCaml类型的函数定义

时间:2018-11-01 17:32:12

标签: function types ocaml

我正在学习编程语言课程,并且在本课程中我们学习一些OCaml。我需要此OCaml类型的函数定义。

('a -> 'a -> 'b) -> 'a -> ('a -> 'b) * 'b 

如何编写这种ocaml类型的函数? 我尝试了一些功能,其中之一非常接近,那就是

let func x y = (x, (x y));;

这给

val func : ('a -> 'b) -> 'a -> ('a -> 'b) * 'b = <fun>
我对第一部分感到困惑; ('a -> 'a -> 'b) 一个函数接受'a和'a和'b('a意味着应该是任何类型)

1 个答案:

答案 0 :(得分:0)

类型('a -> 'a -> 'b) -> 'a -> ('a -> 'b) * 'b是带有两个参数的函数类型。

第一个参数是一个函数本身,该函数接受两个任意类型'a的值,并返回某个任意类型'b(也可以是'a的元素,即没有限制)。

第二个参数是类型'a的值,该值被作为第一个参数传递的函数接受。

返回值是一对。该对的第一个组成部分是一元函数,该函数采用类型'a的参数并返回类型'b的值。第二个成分是类型'b的值。

您应该把这个任务想成是一个难题。您只有两个工具可供使用:函数('a -> 'a -> 'b)和类型为'a的值。所以问题是,您应该对这两个值进行什么操作才能获得结果

提示1:从函数应用程序运算符开始。

提示2:答案非常简单且很小,因此,如果您得到的东西很大,那么您就走错了路。