我正在尝试编写一个函数来检查类型是否相等,忽略实例变量(不确定这是否是SML的正确术语)。优选地,该函数可以在多种数据类型上操作。
所以,如果我有:
数据类型D = A | int的B;
myEqual A A
,myEqual (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中是否有任何操作只检查类型相等,而不检查实例变量?
答案 0 :(得分:4)
首先,datatype D = A | B of int;
只是一种带有两个分支的类型。所以你比较的是不同分支中不同形式的比较。我认为你必须分解数据类型才能编写这样的比较函数。因此,为每种数据类型编写myEqual
函数是很自然的。
其次,如果你想谈论两种独立的数据类型,那么进行这种比较是没有意义的。由于SML是静态的和强类型,因此您可以在编译时知道每个变量的特定类型。