|
|
1
2
让我完全忽略你的例子,给你一个在C#中进行方法类型推理的例子。(如果你对这个话题感兴趣,那么我鼓励你阅读“ type inference “我博客的存档。)
这里我们有一个泛型方法M,它接受一个将字符串映射到T列表上的字典。假设你有一个变量:
我们打过电话
编译器通过“统一”来实现这一点
首先,它决定了
由此我们推断
现在我们有一场比赛
然后我们将List与List统一起来,并意识到我们必须再次递归。 然后我们将int与T统一,并意识到int是T上的一个界。
类型推理算法缓慢地运行,直到它无法再取得任何进展,然后它开始从其推理中进行进一步的推断。T的唯一界限是int,因此我们推断调用者一定希望T是int
|
|
2
5
如果你只是不知道变量的类型怎么办?这就是类型推理的全部意义,对吧?一些非常简单的东西,比如这样(用一些伪代码语言):
你不知道的类型
如果你有另一个这样的函数:
你弄不清它的类型
因此,当你第一次看到一个变量时,你只需为变量分配一些占位符类型,然后,当该变量传递给某种函数或其他东西时,你必须将其与函数的参数类型“统一”。 |
|
|
3
2
假设我们有一个函数 f(x,y) 或者它可能是FunctionOfInteger。 假设我们进去
现在有了统一,u绑定到1,z绑定到2,所以第一个参数是FunctionOfTwoFunctionsOfInteger。
我对C#不太熟悉,但对于lambda表达式(或等效的委托或其他任何东西),这可能是可能的。 关于类型推理在提高定理证明速度方面非常有用的一个例子,请看“舒伯特的蒸汽机” http://www.rpi.edu/~brings/PAI/schub.steam/node1.html 《自动推理杂志》上有一期专门讨论这个问题的解决方案和公式,其中大部分涉及定理证明系统中的类型推理: |
|
|
Joachim Breitner · 重写二阶统一 8 年前 |