http://projecteuler.net/index.php?section=problems&id=7
素数判定は2から順に割っていきます。
let count start = Seq.initInfinite (fun n -> n + start)
let is_prime n = Seq.forall (fun p -> n % p <> 0)
(Seq.takeWhile (fun p -> p * p <= n) (count 2))takeWhileが使いたいのでListでなくSequenceにします。takeWhileで切られるまでの整数で全て割り切れたらpは素数です。全てというのがforallです。第2引数のSequenceから出てくる要素に第1引数の関数を作用させてどれかがfalseになればそこで打ち切ってfalseを返すはずです。
let count start = Seq.initInfinite (fun n -> n + start)
let is_prime n = Seq.forall (fun p -> n % p <> 0)
(Seq.takeWhile (fun p -> p * p <= n) (count 2))
let primes = Seq.filter is_prime (count 2)
let N = 10001
printfn "%d" (snd (Seq.head (Seq.filter (fun x -> fst(x) = N)
(Seq.zip (count 1) primes))))