从F#中的列表中删除nans

mad*_*ant 8 f# list nan

我想nan从列表中删除s,所以我实现了下面显示的函数.

val it : float list =
  [50.0; -20833.33333; 4.50701062e-14; -4.267032701e-15; 3.942195769e-16;
   -3.555114863e-17; 3.130384319e-18; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 
   nan; nan; nan; nan; nan; nan; nan; nan; nan]

let rec remove_nan l =
    match l with
    | [] -> []
    | x::rest -> if x=nan then remove_nan rest
                 else x::(remove_nan rest)

remove_nan points
Run Code Online (Sandbox Code Playgroud)

但是,它不会nan从列表中删除.他们为什么不被删除?

Van*_*oiy 20

NaN具有奇怪的方程属性.具体来说,nan = nan是假的!在代码中使用它:

if System.Double.IsNaN x then remove_nan rest
Run Code Online (Sandbox Code Playgroud)

或者定义remove_nan如下,它更短并且不会增加堆栈:

let remove_nan = List.filter (System.Double.IsNaN >> not)
Run Code Online (Sandbox Code Playgroud)