Functional programming 在OCaml中,为什么有'+'‘;-';但我们只使用'<';而不是‘<';?

Functional programming 在OCaml中,为什么有'+'‘;-';但我们只使用'<';而不是‘<';?,functional-programming,ocaml,Functional Programming,Ocaml,标题说明了这一点 在OCaml中,您可以 1+1但不是1.0+1.0 我有点明白,“+”是一个接受两个int参数的函数 但是为什么我们有适用于float和int的'>'呢 这是不一致的吗?请注意,“>”适用于任何一种类型的两个值。这不仅仅是为了数字 但是,多态比较运算符是OCaml中的一种特殊情况。从理论上讲,不可能定义这样的函数,因为没有一种先验的方法可以用任意类型“查看”值。但是,函数仍然存在,因为它们非常有用 它们也有点危险,许多OCaml专家建议对它们要非常小心 这里有一些关于限制的讨论

标题说明了这一点

在OCaml中,您可以 1+1但不是1.0+1.0

我有点明白,“+”是一个接受两个int参数的函数

但是为什么我们有适用于float和int的'>'呢


这是不一致的吗?

请注意,“>”适用于任何一种类型的两个值。这不仅仅是为了数字

但是,多态比较运算符是OCaml中的一种特殊情况。从理论上讲,不可能定义这样的函数,因为没有一种先验的方法可以用任意类型“查看”值。但是,函数仍然存在,因为它们非常有用

它们也有点危险,许多OCaml专家建议对它们要非常小心


这里有一些关于限制的讨论:

请注意,“>”适用于任何一种类型的两个值。这不仅仅是为了数字

但是,多态比较运算符是OCaml中的一种特殊情况。从理论上讲,不可能定义这样的函数,因为没有一种先验的方法可以用任意类型“查看”值。但是,函数仍然存在,因为它们非常有用

它们也有点危险,许多OCaml专家建议对它们要非常小心


这里有一些关于限制的讨论:

与每种语言中所有其他有问题的东西的原因相同:语言设计很难。要稍微扩展一下这个链接,我不知道专门化多态运算符的方法。如果
'a
是整数,就不能调用这个函数;如果
'a
是float,就不能在ocaml类型系统中调用另一个函数,而不涉及类似于函子的内容。这需要编译器的魔力,我想开发人员从来都不想为算术运算符添加它。这与每种语言中所有其他有问题的东西的原因相同:语言设计很难。要扩展这一链接,我不知道专门化多态运算符的方法。如果
'a
是整数,就不能调用这个函数;如果
'a
是float,就不能在ocaml类型系统中调用另一个函数,而不涉及类似于函子的内容。这需要编译器的魔力,我想开发人员根本不想为算术运算符添加它。