2017-02-17 2 views
0

内部リストの中の一番上のリストが単語を表し、比較比較関数を使用してアルファベット順で最も内側をソートすることができるcharリストリストのList.sortを使用しようとしています。私は比較機能がどのように見えるのだろうか?型 'a - >' a - > intを持ちます。ocamlのcompare関数はどのように見えますか?

答えて

0

OKですので、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']] 

あなたはそれをソートしたいタイプの2つのパラメータを持つだけで、関数の機能比較独自のものを書きたい場合。あなたはこのコンペア機能を使用することができます単語と単語の間にスペースを無視するために、単語のリストをソートするに:

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を使用している場合は、考えられる候補を探す場所を知っておく必要があります)

関連する問題