【问题标题】:Force equality for real numbers in Real in SML强制 SML 中 Real 中的实数相等
【发布时间】:2017-03-04 17:48:28
【问题描述】:

正如REAL signature 中所解释的,SML 中定义的实类型不是相等类型,因此以下表达式不会归约

> 1.0 = 1.0;
poly: : error: Type error in function application.
   Function: = : ''a * ''a -> bool
   Argument: (1.0, 1.0) : real * real
   Reason: Can't unify ''a to real (Requires equality type)

但是,这并不方便,因为包含实数的数据类型和列表也会失去相等性。我需要用Real.== 重载多态相等=,这样它也可以近似地考虑实数。

这可能吗?

编辑:编辑问题更清楚

【问题讨论】:

    标签: types sml mlton


    【解决方案1】:

    您是否阅读过 Why can't I compare reals in Standard ML 并考虑过 Real.== 运算符或执行 epsilon 测试?您是否考虑过像 Haskell 的 Data.Decimal 这样的类型(其中尾数和指数被处理为一对整数)?

    【讨论】:

    • 是的,我已经阅读了 Stack Overflow 帖子。我的问题是“我可以用Real.== 重载=”吗?因为我需要在数据类型和列表中使用实数
    【解决方案2】:

    简单的答案是:不,你不能。

    【讨论】:

    • 感谢相关回答。
    猜你喜欢
    • 1970-01-01
    • 2011-05-26
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 2021-10-09
    • 2014-01-13
    • 2023-03-14
    相关资源
    最近更新 更多