ocaml定义函数'a - > “b

时间:2015-10-13 21:05:41

标签: ocaml

我有一个任务来定义两个函数,一个是type:

 ('a-> 'b) -> ('c -> 'a) -> 'c -> 'b

和第二个只有

'a -> 'b

虽然第一个功能是组合,但我已经这样做了:

let compose f g arg = f(g(arg))

我被困在第二个。有人能引导我正确回答吗?我做了这个:

let a x = List.hd []

但我非常确定有更简单的例子。

1 个答案:

答案 0 :(得分:4)

第一个功能不是currying,它的功能构成。 Currying的类型为('a * 'b -> 'c) -> 'a -> 'b -> 'c

您对'a -> 'b的解决方案非常好。请注意List.hd []引发异常。所以另一个实现是:

let f x = raise Not_found

要意识到的是,没有"很好"函数可能具有给定的类型。它会在哪里获得返回类型'b的实际值?它必须是一个可以有任何类型的值。