OCAML中的比较函数是什么样的



我正在尝试使用list.sort。命令。我想知道比较函数是什么样的?它具有类型的'a->'a-> int。

好的,所以 char list是一个单词,而 char list list是单词列表。您正在对单词列表进行排序。什么是单词列表的字母顺序?哪个是"骑自行车的人"或"自行车短裤"?字典不同意该命令。

如果您想要"自行车短裤",这是(递归)词典命令。

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

相关内容

  • 没有找到相关文章

最新更新