Sml 按字典顺序对一系列整洁的列表进行排序

Sml 按字典顺序对一系列整洁的列表进行排序,sml,Sml,考虑以下嵌套列表: [["AXY"],["ABC","XYZ"],["EFG","ACF"]] 我想按每个内部列表的第一个元素按字典顺序对列表进行排序。输出应为: [["ABC","XYZ"],["AXY"],["EFG","ACF"]] 如果任务是只对一个列表进行排序,我将使用以下线程()中的方法之一。但是如何对嵌套列表进行排序呢?假设有一个通用排序函数使用cmp函数(如图所示),则只需编写一个包含两个字符串列表的排序函数: fun cmpnest ((x::xs):string list

考虑以下嵌套列表:

[["AXY"],["ABC","XYZ"],["EFG","ACF"]]
我想按每个内部列表的第一个元素按字典顺序对列表进行排序。输出应为:

[["ABC","XYZ"],["AXY"],["EFG","ACF"]]

如果任务是只对一个列表进行排序,我将使用以下线程()中的方法之一。但是如何对嵌套列表进行排序呢?

假设有一个通用排序函数使用cmp函数(如图所示),则只需编写一个包含两个字符串列表的排序函数:

fun cmpnest ((x::xs):string list, (y::ys):string list) = if x > y then GREATER else LESS
|   cmpnest ((x::xs):string list, nil) = GREATER
|   cmpnest (nil, _) = LESS
完成后,您可以在通用排序函数中使用它:

- sort cmpnest [["AXY"], ["ABC", "XYZ"], ["EFG", "ACF"]];
> val it = [["ABC", "XYZ"], ["AXY"], ["EFG", "ACF"]] : string list list

除了L3viathan的答案之外,您还可以使用
String.compare

fun cmpnest (x::_, y::_) = String.compare (x, y)
  | cmpnest (_::_, []) = GREATER
  | cmpnest ([], _) = LESS