HaskellsortBy
関数は(a -> a -> Ordering)
、最初の引数として取ります。そこにどんな理由があるのか、誰でも教えてもらえますか? 私のバックグラウンドは完全に、代わりに同様の関数 take を持つ言語にあるため、 /(a -> a -> Bool)
を返す関数を作成する必要があるのは少し混乱しました。LT
GT
これは、静的に型付けされた/純粋な関数型言語で行う標準的な方法ですか? これは ML 系言語特有のものですか? 私が見ていない基本的な利点、または代わりにブール値を使用することの隠れた欠点はありますか?
要約:
An
Ordering
は ではなくGT | LT
、実際にはGT | EQ | LT
(GHC
ソートの目的でこれをボンネットの下で使用していないようですが、それでも)3 分値を返すと、2 つの要素を比較した結果をより厳密にモデル化できます。
場合によって
Ordering
は、a ではなくを使用Bool
すると比較が保存されますを使用すると、
Ordering
安定ソートの実装が容易になりますを使用する
Ordering
と、2 つの要素間の比較が行われていることが読者に明確になります (ブール値は本質的にこの意味を持っていませんが、多くの読者がそれを想定しているように感じます)。
この編集の時点で単一の回答がすべてのポイントに達していないため、カールの回答を暫定的に受け入れ、上記の要約を投稿しています。