List ocaml中的比较函数是什么样子的?
我正在尝试对字符列表使用List.sort,其中最里面的列表代表一个单词,我可以使用compare compare函数按字母顺序对最里面的列表进行排序。我想知道比较函数是什么样子的?它的类型是'a->'a->int.OK,因此List ocaml中的比较函数是什么样子的?,list,sorting,compare,ocaml,List,Sorting,Compare,Ocaml,我正在尝试对字符列表使用List.sort,其中最里面的列表代表一个单词,我可以使用compare compare函数按字母顺序对最里面的列表进行排序。我想知道比较函数是什么样子的?它的类型是'a->'a->int.OK,因此字符列表是一个单词,字符列表是单词列表。您正在对单词列表进行排序。单词表的字母顺序是什么?“自行车手”和“自行车短裤”哪一个先到?字典的顺序不一致 如果你想让“自行车短裤”排在第一位,这是(递归的)字典顺序 内置多态compare使用字典顺序。所以你可以直接使用它: # L
字符列表
是一个单词,字符列表
是单词列表。您正在对单词列表进行排序。单词表的字母顺序是什么?“自行车手”和“自行车短裤”哪一个先到?字典的顺序不一致
如果你想让“自行车短裤”排在第一位,这是(递归的)字典顺序
内置多态compare
使用字典顺序。所以你可以直接使用它:
# List.sort compare [[['b'; 'i'; 'k'; 'e'; 'r']];
[['b'; 'i'; 'k'; 'e']; ['s'; 'h'; 'o'; 'r'; 't'; 's']]];;
- : char list list list =
[[['b'; 'i'; 'k'; 'e']; ['s'; 'h'; 'o'; 'r'; 't'; 's']];
[['b'; 'i'; 'k'; 'e'; 'r']]
如果你想写你自己的比较函数,它只是一个有两个你想要排序的参数类型的函数。要按忽略单词之间空格的顺序对单词列表进行排序,可以使用此比较功能:
let catcompare a b = compare (List.concat a) (List.concat b)
# List.sort catcompare [[['b'; 'i'; 'k'; 'e']; ['s'; 'h'; 'o'; 'r'; 't'; 's']];
[['b'; 'i'; 'k'; 'e'; 'r']]];;
- : char list list list =
[[['b'; 'i'; 'k'; 'e'; 'r']];
[['b'; 'i'; 'k'; 'e']; ['s'; 'h'; 'o'; 'r'; 't'; 's']]]
如果您想对内部列表进行排序,那么问题不在于比较函数。您可以使用相同的内置compare
。真正的问题是如何将函数应用于列表的所有元素,并将结果收集到列表中。(我将此留作练习。如果您已经在使用List.sort
,您应该知道在哪里寻找可能的想法。)