我正在尝试制作一个素数生成器,它应该能够返回一个素数序列,直到 nth 数。现在我认为除了我目前的解决方案之外,应该有更优雅的方式来处理这些序列,感觉有点冗长而且我不得不使用mutables。
0
|> Seq.unfold (fun x -> if isPrime x
then Some(x, x + 1)
else
let mutable y = x
while isPrime y <> true do
y <- y + 1
Some(y, y + 1))
|> Seq.take(n)
答案 0 :(得分:5)
使用过滤器的简单解决方案
let t = Seq.initInfinite id |> Seq.filter isPrime |> Seq.take n
答案 1 :(得分:0)
仅为了完整性,请参阅此MSDN treatment of sequences。它包括thisPrime定义
let isPrime n =
let rec check i =
i > n/2 || (n % i <> 0 && check (i + 1))
check 2
let t2 n = seq { for n in 1..100 do if isPrime n then yield n }
t2 10