【问题标题】:What is eqtype in Standard ML?标准 ML 中的 eqtype 是什么?
【发布时间】:2019-08-26 12:04:29
【问题描述】:

在下面给定的代码中,eqtype 是什么意思?我知道在 SML 中有一个 type 关键字,它可以让您为类型设置别名,但 eqtype 对我来说是新事物。

signature SYMBOL =
sig
  eqtype symbol
  val symbol : string -> symbol
  val name : symbol -> string
  type 'a table
  val empty : 'a table
  val enter : 'a table * symbol * 'a -> 'a table
  val look  : 'a table * symbol -> 'a option
end

我试图在文档中找到解释,但找不到任何相关信息。谁能给我解释一下?谢谢。

直观地说,eqtype 让我们声明一个类型,我们需要在创建此签名的结构时指定该类型。

【问题讨论】:

  • 定义了相等性的类型。
  • 我是初学者@L3viathan。你能解释一下equality is defined是什么意思吗?
  • 要查看相等类型和非相等类型之间的区别,请评估 1 = 11.0 = 1.0。 int 是相等类型。花车不是。
  • 这是否也意味着我不能将我的eqtype symbol 设置为浮点数?
  • 请参阅this answer 了解为什么实数会这样工作。 SML 旨在提供可证明的正确代码。检查实数是否相等通常是一个错误(Is floating point math broken? 是 Stack Overflow 上重复最多的问题之一)。 SML 甚至不允许编译此类错误。

标签: sml


【解决方案1】:

eqtype 是相等类型的关键字。 sml 中的相等类型被定义为可以与= 进行比较的值类型。例如 int、string list、bool * bool option 都是相等类型,而 real、int -> int 则不是。

在签名中,当你有 eqtype 时,你添加了一个额外的约束层,告诉 sml 类型是相等类型。任何结构归因于 this sig 都需要将类型定义为相等类型。

【讨论】:

    猜你喜欢
    • 2014-06-30
    • 2015-04-05
    • 2013-07-27
    • 2010-12-16
    • 2017-05-14
    • 1970-01-01
    • 2010-11-12
    • 2017-08-28
    • 2011-05-05
    相关资源
    最近更新 更多