ocaml 定义函数 'a -> 'b
ocaml define function 'a -> 'b
我的任务是定义两个函数,一个类型为:
('a-> 'b) -> ('c -> 'a) -> 'c -> 'b
第二个只有
'a -> 'b
虽然第一个功能是合成,但我是这样做的:
let compose f g arg = f(g(arg))
我卡在第二个了。谁能引导我找到正确答案?我做了这个:
let a x = List.hd []
但我很确定还有更简单的例子。
第一个函数不是柯里化,而是函数组合。柯里化的类型为 ('a * 'b -> 'c) -> 'a -> 'b -> 'c
.
您 'a -> 'b
的解决方案非常好。请注意 List.hd []
会引发异常。所以另一种实现是:
let f x = raise Not_found
需要注意的是 "nice" 函数不可能具有给定的类型。它从哪里获得类型 'b
到 return 的实际值?它必须是一个可以具有任何类型的值。
我的任务是定义两个函数,一个类型为:
('a-> 'b) -> ('c -> 'a) -> 'c -> 'b
第二个只有
'a -> 'b
虽然第一个功能是合成,但我是这样做的:
let compose f g arg = f(g(arg))
我卡在第二个了。谁能引导我找到正确答案?我做了这个:
let a x = List.hd []
但我很确定还有更简单的例子。
第一个函数不是柯里化,而是函数组合。柯里化的类型为 ('a * 'b -> 'c) -> 'a -> 'b -> 'c
.
您 'a -> 'b
的解决方案非常好。请注意 List.hd []
会引发异常。所以另一种实现是:
let f x = raise Not_found
需要注意的是 "nice" 函数不可能具有给定的类型。它从哪里获得类型 'b
到 return 的实际值?它必须是一个可以具有任何类型的值。