Seq.sort和Seq.sortBy对含有NaN的浮子序列的行为不一致

ben*_*ben 6 f#

在对包含NaN的浮点序列进行排序时,Seq.sort将NaN放在结果的开头:

> [ 0.0; nan; 1.0; nan; -1.0 ] |> Seq.sort
val it : seq<float> = seq [nan; nan; -1.0; 0.0; ...]
Run Code Online (Sandbox Code Playgroud)

但是,Seq.sortBy似乎失败了,只是传递序列,未分类.据推测这是因为NaN违反了基本的排序原则.

> [ 0.0; nan; 1.0; nan; -1.0 ] |> Seq.sortBy id
val it : seq<float> = seq [0.0; nan; 1.0; nan; ...]
Run Code Online (Sandbox Code Playgroud)

没有抛出异常,这可能表明sortBy无法生成排序列表,这可能会导致依赖于它的代码中出现令人惊讶的行为.一旦找到问题就很容易对问题进行编码,但很难预料到,并且很可能导致错误.

排序和排序是否有充分理由以这种方式不一致?