我正在尝试实现一种自定义语言,该语言允许从其最后一条语句中推断出函数返回类型。但是,当找到直接或间接递归函数调用时,类型推断系统显然会失败。
func factorial(a:int) ->
if a == 0
1
else
a * factorial(a - 1)
例如,即使参数类型未指定,F# 也会这样做:
let rec fact i =
if i = 0 then 1 else i * fact (i-1)
这个系统是如何工作的?