输入ML函数定义的配置文件

时间:2015-02-18 23:24:29

标签: functional-programming ml

我在谷歌搜索过,但我没有找到关于ML的类型配置文件的任何信息。

例如:fun bar(a, b, c) = [a, b + hd(c)];

类型配置文件是: int * int * int list - > int list

fun weird x z = [x, tl(z)]类型配置文件'列表 - > '列表 - > '列表

但我不明白它背后的逻辑。

1 个答案:

答案 0 :(得分:4)

“类型配置文件”不是一件事。你可能意味着类型推断。在这种情况下很容易。首先,请注意像你这样的curried函数定义等同于编写

val weird = fn x => fn z => [x, tl z]

现在:

  1. 从函数的结构来看,weird : A -> B -> C对于某些类型A,B,C。
  2. 结果是一个列表,因此对于某些类型D,C必须为D list
  3. 您正在tl上调用z,因此某些类型E B必须为E list
  4. 该调用的结果与E list相同,因此D必须与E list相同。
  5. x用作同一列表的元素,因此A也必须为E list
  6. 没有进一步的约束,因此我们可以为'a选择E
  7. 把所有这些放在一起,你得到

    weird : 'a list -> 'a list -> 'a list list