2017-02-17 45 views
0

我想在char列表的列表中使用List.sort,其中最內層的列表是一個單詞的代表,我可以使用比較比較函數按字母順序對最內層進行排序。我想知道比較函數是什麼樣子?它有類型'a - >'a - > int。ocaml中的比較函數是什麼樣的?

回答

0

好的,所以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,你應該知道在哪裏尋找可能的想法。)