我正在学习编程语言课程,并且在本课程中我们学习一些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意味着应该是任何类型)
答案 0 :(得分:0)
类型('a -> 'a -> 'b) -> 'a -> ('a -> 'b) * 'b
是带有两个参数的函数类型。
第一个参数是一个函数本身,该函数接受两个任意类型'a
的值,并返回某个任意类型'b
(也可以是'a
的元素,即没有限制)。
第二个参数是类型'a
的值,该值被作为第一个参数传递的函数接受。
返回值是一对。该对的第一个组成部分是一元函数,该函数采用类型'a
的参数并返回类型'b
的值。第二个成分是类型'b
的值。
您应该把这个任务想成是一个难题。您只有两个工具可供使用:函数('a -> 'a -> 'b)
和类型为'a
的值。所以问题是,您应该对这两个值进行什么操作才能获得结果
提示1:从函数应用程序运算符开始。
提示2:答案非常简单且很小,因此,如果您得到的东西很大,那么您就走错了路。