The sieve of Eratosthenes in F#
Estoy interesado en una implementación de latamiz de eratóstenes en F # puramente funcional. Estoy interesado en una implementación del tamiz real,no la ingenua implementación funcional que no es realmente el tamiz, así que no es algo como esto:
let rec PseudoSieve list =
match list with
| hd::tl -> hd :: (PseudoSieve <| List.filter (fun x -> x % hd <> 0) tl)
| [] -> []
El segundo enlace anterior describe brevemente un algoritmo que requeriría el uso de un mapa múltiple, que no está disponible en F # hasta donde yo sé. La implementación de Haskell dada utiliza un mapa que admite uninsertWith
método, que no he visto disponible en elMapa funcional F #.
¿Alguien sabe una manera de traducir el código de mapa de Haskell dado a F #, o tal vez conoce métodos de implementación alternativos o algoritmos de tamizado que sean tan eficientes y más adecuados para una implementación funcional o F #?