F #

2017-02-10 11 views
9

में किसी सूची से नैन को निकालना मैं एक सूची से nan एस को निकालना चाहता हूं, इसलिए मैंने नीचे दिखाए गए फ़ंक्शन को कार्यान्वित किया है।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 

हालांकि, यह सूची से nan को हटा नहीं देता है। उन्हें क्यों हटाया नहीं जा रहा है?

उत्तर

20

NaN में अजीब समीकरण गुण हैं। विशेष रूप से, nan = nan झूठा है! अपने कोड में इस का उपयोग करें:

if System.Double.IsNaN x then remove_nan rest 

या के रूप में इस प्रकार है, जो कम है और ढेर नहीं उगता remove_nan को परिभाषित:

let remove_nan = List.filter (System.Double.IsNaN >> not) 
संबंधित मुद्दे