Сито Эратосфена в F #

Меня интересует реализация сита эратосфенов в чисто функциональном F #. Меня интересует реализация настоящего сита, не наивная функциональная реализация, которая на самом деле не сито , поэтому не что-то вроде этого:

let rec PseudoSieve list =
    match list with
    | hd::tl -> hd :: (PseudoSieve <| List.filter (fun x -> x % hd <> 0) tl)
    | [] -> []

Вторая ссылка выше кратко описывает алгоритм, который потребует использование multimap, которое, насколько мне известно, недоступно в F #. В данной реализации Haskell используется карта, поддерживающая метод insertWith , который я не видел доступным в функциональной карте F # .

Кто-нибудь знает способ перевести данный Код отображения Haskell на F #, или, возможно, знает об альтернативных методах реализации или алгоритмах просеивания, которые столь же эффективны и лучше подходят для функциональной реализации, или F #?

35
задан Will Ness 1 July 2013 в 18:05
поделиться