没有polyEqual的SML自定义数据类型相等

时间:2011-11-18 12:40:38

标签: sml

我正在尝试编写一个函数来检查类型是否相等,忽略实例变量(不确定这是否是SML的正确术语)。优选地,该函数可以在多种数据类型上操作。

所以,如果我有:

  

数据类型D = A | int的B;

myEqual A AmyEqual (B 1) (B 1)myEqual (B 1) (B 2)都将返回true,myEqual A (B 1)将返回false。

我的第一个想法是将其实现为fun myEqual a b = a = b;之类的东西。但是,这会比较两个变量的实例变量,这不是我想要的,因此myEqual (B 1) (B 2)将返回false。

我知道在这种情况下可以通过使用像

这样的模式匹配来实现
fun myEqual (B _) (B _) = true
  | myEqual A A = true
  | myEqual _ _ = false;

但这仅适用于此特定数据类型。

SML中是否有任何操作只检查类型相等,而不检查实例变量?

1 个答案:

答案 0 :(得分:4)

首先,datatype D = A | B of int;只是一种带有两个分支的类型。所以你比较的是不同分支中不同形式的比较。我认为你必须分解数据类型才能编写这样的比较函数。因此,为每种数据类型编写myEqual函数是很自然的。

其次,如果你想谈论两种独立的数据类型,那么进行这种比较是没有意义的。由于SML是静态的和强类型,因此您可以在编译时知道每个变量的特定类型。