比较函数在ocaml中的含义是什么?

时间:2017-02-17 04:53:10

标签: list sorting compare ocaml

我正在尝试在char列表列表列表中使用List.sort,其中最内部列表代表一个单词,我可以使用比较比较函数按字母顺序对内部排序进行排序。我想知道比较函数是什么样的?它有'a - >类型'a - >中间体

1 个答案:

答案 0 :(得分:0)

好的,char list是一个单词,char list list是单词列表。您正在排序单词列表。单词列表的字母顺序是什么?首先是" biker"或者"自行车短裤"?字典不同意订单。

如果你想要"自行车短裤"首先,这是(递归)词典顺序。

内置的多态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,您应该知道在哪里寻找可能的想法。)

相关问题