我在谷歌搜索过,但我没有找到关于ML的类型配置文件的任何信息。
例如:fun bar(a, b, c) = [a, b + hd(c)];
类型配置文件是: int * int * int list - > int list 和
fun weird x z = [x, tl(z)]
类型配置文件'列表 - > '列表 - > '列表
但我不明白它背后的逻辑。
答案 0 :(得分:4)
“类型配置文件”不是一件事。你可能意味着类型推断。在这种情况下很容易。首先,请注意像你这样的curried函数定义等同于编写
val weird = fn x => fn z => [x, tl z]
现在:
weird : A -> B -> C
对于某些类型A,B,C。C
必须为D list
。tl
上调用z
,因此某些类型E B
必须为E list
。E list
相同,因此D
必须与E list
相同。x
用作同一列表的元素,因此A
也必须为E list
。'a
选择E
。把所有这些放在一起,你得到
weird : 'a list -> 'a list -> 'a list list