我想寫一個函數來檢查類型相等,忽略實例變量(不知道如果這是SML正確的術語)。優選地,該功能可以在多種數據類型上操作。SML自定義數據類型相等沒有polyEqual
所以,如果我有:
數據類型d = A |整數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中是否有任何操作只檢查類型相等,而不檢查實例變量?
或總之,編號:) –
SML做出了比這更強有力的保證。在編譯時你總是知道每個表達式的類型。 –