読者です 読者をやめる 読者になる 読者になる

素数の無限数列

OCaml
# let rec prime_seq primes x =
    let x' = x + 1 in
    let rec is_prime n = function
      [] -> true
    | p :: rest -> p*p <= x' && n mod p <> 0 && is_prime n rest
    in
    if is_prime x' primes
      then Cons (x', prime_seq (x' :: primes))
      else prime_seq primes x';;
val prime_seq : int list -> int -> intseq = <fun>
# let prime = Cons (2, prime_seq [2]);;
val prime : intseq = Cons (2, <fun>)
# let int_list_of_intseq f n =
    map (fun (Cons (x, _)) -> x) (repeat n (fun (Cons (x, f)) -> f x) f);;
val int_list_of_intseq : intseq -> int -> int list = <fun>
# int_list_of_intseq prime 100;;
- : int list =
[2; 3; 5; 7; 11; 13; 17; 19; 23; 29; 31; 37; 41; 43; 47; 53; 59; 61; 67; 71;
 73; 79; 83; 89; 97; 101; 103; 107; 109; 113; 127; 131; 137; 139; 149; 151;
 157; 163; 167; 173; 179; 181; 191; 193; 197; 199; 211; 223; 227; 229; 233;
 239; 241; 251; 257; 263; 269; 271; 277; 281; 283; 293; 307; 311; 313; 317;
 331; 337; 347; 349; 353; 359; 367; 373; 379; 383; 389; 397; 401; 409; 419;
 421; 431; 433; 439; 443; 449; 457; 461; 463; 467; 479; 487; 491; 499; 503;
 509; 521; 523; 541]
# nthseq 132 prime;;
- : int = 743