我正在摸索着想出这个功能的签名
let make_rec f_norec =
let rec f x = f_norec f x in
f
应该是
val make_rec : (('a -> 'b) -> 'a -> 'b) -> 'a -> 'b = <fun>
。
注意有一个奇怪的递归定义。当然,我在那里缺少一些知识。谁能告诉我如何计算函数的类型(如类型推理系统那样)?
非常感谢。
答案 0 :(得分:6)
从内部开始,向外工作:
x
a
f
的类型为a -> b
,b
的结果类型为f
f_norec
需要f
和x
,且必须返回与f
相同的类型,因此(a->b) -> a -> b
make_rec
获取f_norec
,并返回f
。因此((a->b)->a->b) -> (a->b)
。出于语法原因,可以省略最后一对括号。