在对包含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无法生成排序列表,这可能会导致依赖于它的代码中出现令人惊讶的行为.一旦找到问题就很容易对问题进行编码,但很难预料到,并且很可能导致错误.
排序和排序是否有充分理由以这种方式不一致?