SML:如何比较(<;或>;)两种相等类型

SML:如何比较(<;或>;)两种相等类型,sml,Sml,我对SML中的以下代码有问题: fun inter s1 s2 = let fun inter' [] _ interSet = interSet | inter' _ [] interSet = interSet | inter' (x1::s1) (x2::s2) interSet = if x1=x2 then inter' s1 s2 (x1::interSet) (* Add the valu

我对SML中的以下代码有问题:

fun inter s1 s2 =
  let
    fun inter' [] _ interSet = interSet
      | inter' _ [] interSet = interSet 
      | inter' (x1::s1) (x2::s2) interSet =
            if x1=x2 then
                inter' s1 s2 (x1::interSet) (* Add the value to the intersection and advance in both s1 and s2*)
            else if x1 < x2 then
                inter' s1 (x2::s2) interSet (* Keep going through s1 *)
            else
                inter' (x1::s1) s2 interSet (* Keep going through s2 *)
   in
      if s1=[] orelse s2=[] then []
      else                          
        inter' s1 s2 []
end;
为什么不是:

val inter = fn: ''a list -> ''a list -> ''a list    ?
看起来问题来自于

x1 < x2
x1

我认为<运算符对于所有等式类型都重载了,这是错误的吗?例如,它不应该能够比较字符串吗

是的,你错了。如果相等类型支持排序,则它们可能被称为排序类型。;)


您需要做的是将比较运算符作为参数传递给
inter
函数。或者,如果这是一个更大的模块的一部分,你可以考虑把它变成一个函子。在这两种情况下,我建议传递的不是一个小于then运算符,而是一个3向函数
compare:'a*'a->order
,这是为每个内置类型预定义的,例如
Int.compare

,谢谢您的回答!这一切现在都是有意义的:)。请不要忘记,如果答案对您有帮助,请将其标记为已接受。还有,投票给他们。
x1 < x2