条件:
当 1.list 比 2.list 长时返回值:1
当 1.list 与 2.list 具有相同数量的元素时返回值:0 当 1.list 比 w 短时。列表返回值:~1
([1,2,4,5],[3,2,5]);
1
([1,2],[1,5]);
0
([5],[8,2,3]);
~1
那么length
在这种情况下,该功能可能是您的朋友:
fun foo (xs, ys) =
let
val len_xs = length xs
val len_ys = length ys
in
case (len_xs < len_ys, len_xs > len_ys) of
(true, false) => ~1
| (false, true) => 1
| (false, false) => 0
end
这将产生结果:
- foo ([1,2,4,5],[3,2,5]);
val it = 1 : int
- foo ([1,2],[1,5]);
val it = 0 : int
- foo ([5],[8,2,3]);
val it = ~1 : int
然而,这既低效又丑陋。因此,我们也可以一次从每个列表中提取一个元素,直到其中一个(或两者)为空:
fun bar ([], []) = 0
| bar (_, []) = 1
| bar ([], _) = ~1
| bar (_ :: xs, _ :: ys) = bar (xs, ys)
这给出了结果:
- bar ([1,2,4,5],[3,2,5]);
val it = 1 : int
- bar ([1,2],[1,5]);
val it = 0 : int
- bar ([5],[8,2,3]);
val it = ~1 : int