【问题标题】:SML arithmetic function's type is inferred to intSML 算术函数的类型被推断为 int
【发布时间】:2015-11-11 18:49:32
【问题描述】:

在定义一个取值平方的简单函数时,SML NJ 将此函数的签名推断为整数类型。在为浮点类型声明签名时,SML 可以在此处使用浮点值。

- 有趣的 sqr x = x * x; val sqr = fn : int -> int - 有趣的 sqqr (x : real) = x * x; val sqqr = fn : 真实 -> 真实 - sqqr 3.4; val it = 11.56:真实
  • SML 为什么以及如何在此处推断此特定类型?
  • 是否有对整数的特定偏好?
  • 是这些算术运算的特殊行为还是可以在其他地方找到?

【问题讨论】:

    标签: types sml smlnj ml


    【解决方案1】:

    SML 97 specification附录 E 中定义了重载运算符的行为。对于*,+,-,默认类型为int。对于/,默认类型为real。这有助于维护“标准 ML”中的“标准”。

    【讨论】:

      【解决方案2】:

      SML 的类型方法在重载方面确实不能很好地工作,这就是为什么您不能定义自己的重载函数的原因。但是——算术和关系运算符的重载在编程语言中非常普遍,以至于 SML 的设计者接受了+* 等的标准重载。这给 SML 的类型推断机制带来了问题。为了解决这个问题,他们可能需要在这种情况下显式地声明类型,但这会降低类型推断的有用性。相反,他们抓住了为函数选择默认类型的想法,这些函数的定义对整数和实数(如果涉及 ,甚至是字符串)都非常有意义,以及覆盖默认值的机制。鉴于 SML 的主要应用是自动定理证明器而不是数值分析,int 似乎是自然的选择。每次我需要覆盖默认值时,我可能已经接受了 10 次。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-09
        • 2023-03-08
        • 2022-08-03
        • 1970-01-01
        相关资源
        最近更新 更多