ML 如何在以下函数定义中执行类型推断:
let add a b = a + b
它是否像 C++ 模板一样,在模板实例化之前不执行类型检查,之后如果类型支持必要的操作,函数就可以工作,否则会抛出编译错误?
即例如下面的函数模板
template <typename NumType>
NumType add(NumType a, NumType b) {
return a + b;
}
将工作于
add<int>(23, 11);
但不适用于
add<ostream>(cout, fout);
我的猜测是正确的还是 ML 类型推断的工作方式不同?
PS:抱歉我的英语不好;这不是我的母语。
最佳答案
我建议你看看这篇文章:What is Hindley-Milner? (and why is it cool)
这是他们用来解释类型推断的最简单的例子(不是机器学习,但思路是一样的):
def foo(s: String) = s.length
// note: no explicit types
def bar(x, y) = foo(x) + y
只看bar的定义,我们很容易看出它的类型一定是(String, Int)=>Int。简而言之,这就是类型推断。阅读整篇文章以获取更多信息和示例。
我不是 C++ 专家,但我认为模板是更接近通用性/参数化的东西,这是不同的东西。
关于c++ - 向 C++ 程序员解释 ML 类型推断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2677990/