Sml 如何在递归函数中使用if-then-else

Sml 如何在递归函数中使用if-then-else,sml,smlnj,Sml,Smlnj,我正在编写一个函数,该函数将获取一个列表列表,并将其合并为列表的排序对。例如[[1]、[9]、[8]、[7]、[4]、[5]、[6]]将返回[[1,9]、[7,8]、[4,5]、[6]]。这是我第一次尝试SML。我经常遇到这样的错误:运算符和操作数不一致[重载冲突] fun mergePass[] = [] | mergePass(x::[]) = x::[] | mergePass(x::y::Z) = if x<y th

我正在编写一个函数,该函数将获取一个列表列表,并将其合并为列表的排序对。例如[[1]、[9]、[8]、[7]、[4]、[5]、[6]]将返回[[1,9]、[7,8]、[4,5]、[6]]。这是我第一次尝试SML。我经常遇到这样的错误:运算符和操作数不一致[重载冲突]

    fun mergePass[] = []
    |   mergePass(x::[]) = x::[]
    |   mergePass(x::y::Z) = 
        if x<y
        then (x @ y)::mergePass(Z)
        else (y @ x)::mergePass(Z);
编辑:如果在[[1,9]、[7,8]、[4,5]、[6]]上调用mergePass,我需要它返回[[1,7,8,9]、[4,5,6]]

此合并函数接受两个排序列表

   fun merge([],y) = y
   |   merge(x,[]) = x
   |   merge(a::x,b::y) =
   if a < b then a::merge(x,b::y)
   else b::merge(a::x,y);

你看起来很接近。一些提示/备注:

1在美学上,在一行中使用nil,在其他行中使用[]似乎很奇怪。使用全部为零或使用全部[]


2由于输入是列表的列表,在x::y::z中,标识符x和y将是整数列表,而不是单个整数。那么,是什么行/表达式导致了错误?这就是我得到的错误:stdIn:5.7-5.12错误:运算符和操作数不一致[重载冲突]运算符域:“Z list*”Z list操作数:[| mergePass (xs::ys::zss) = (merge xs ys) :: mergePass zss
| mergePass (xs::ys::zss) = sort(xs @ ys) :: mergePass zss