F #

2017-02-10 34 views
9

içindeki bir listeden silme nan s listeden kaldırmak istiyorum, bu nedenle aşağıda gösterilen işlevi uygulamıyorum.F #

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 

Ancak, listeden nan 's kaldırmaz. Neden kaldırılmıyorlar?

cevap

20

NaN, garip denklem özelliklerine sahiptir. Özellikle, nan = nan yanlıştır!

if System.Double.IsNaN x then remove_nan rest 

Veya daha kısa olan takip eder ve yığın büyümek olmadığı için remove_nan tanımlamak: kodunuzu bunu kullanın

let remove_nan = List.filter (System.Double.IsNaN >> not)