F#の無限シーケンスで素数列
Haskellでよくある
primes = [2, 3] ++ filter (\n -> all (\p -> mod n p /= 0) $ takeWhile (\p -> p*p <= n) primes) [5, 7 ..]
的なやつを。
let infty n m = Seq.initInfinite (fun i -> n + i * m) let rec primes = seq { yield! [2; 3] for i in infty 5 2 do if Seq.forall (fun x -> i % x <> 0) (Seq.takeWhile (fun x -> x*x <= i) primes) then yield i }
なんか若干「そういう言語じゃねーから」みたいな感じがしますね。
F#は正格評価の言語なので、C#でいうとIEnumerable<T>とか書く時のごてっとした感じ?