Podczas generowania liczb pierwszych w F #, dlaczego „Sito Erosthenes” jest tak powolne w tej konkretnej implementacji?

TO ZNACZY,

Co ja tu robię źle? Czy ma to związek z listami, sekwencjami i tablicami oraz sposobem działania ograniczeń?

Oto konfiguracja: próbuję wygenerować kilka liczb pierwszych. Widzę, że istnieje miliard plików tekstowych z miliardem liczb pierwszych. Pytanie nie brzmi, dlaczego ... pytanie brzmi: w jaki sposób faceci używają Pythona do obliczania wszystkich liczb pierwszych poniżej 1 000 000 w milisekundachten post... a co robię źle z następującym kodem F #?

let sieve_primes2 top_number = 
    let numbers = [ for i in 2 .. top_number do yield i ]
    let sieve (n:int list) = 
        match n with
        | [x] -> x,[]
        | hd :: tl -> hd, List.choose(fun x -> if x%hd = 0 then None else Some(x)) tl
        | _ -> failwith "Pernicious list error."
    let rec sieve_prime (p:int list) (n:int list) =  
        match (sieve n) with
        | i,[] -> i::p
        | i,n'  -> sieve_prime (i::p) n'
    sieve_prime [1;0] numbers 

Z włączonym zegarem w FSI, otrzymuję 4,33 sekundy wartości procesora na 100000 ... po tym wszystkim, wszystko po prostu wybuchnie.

questionAnswers(4)

yourAnswerToTheQuestion