(************************************************************ useSequence.ml Created : Wed Feb 27 01:16:20 2002 Last modified: Thu Feb 28 00:08:34 2002 Compile: make # ************************************************************) open LibSequence let rec filter_sequence f stream = let hd = (head stream) in if (f hd) then cons hd (ref (Lazy.Delayed (fun () -> (filter_sequence f (tail stream))))) else filter_sequence f (tail stream);; let rec integers_from_n n = cons n (ref (Lazy.Delayed (fun () -> integers_from_n (n + 1)))) let integers = integers_from_n 0 let odds = filter_sequence (fun x -> x mod 2 = 0) integers (* エラトネスのふるい *) let rec seive n numbers = let tmp = filter_sequence (fun x -> x mod n <> 0) numbers in let hd = head tmp in cons hd (ref (Lazy.Delayed(fun () -> seive hd (tail tmp))));; let from_2 = integers_from_n 2 let primes = seive 2 from_2 let print_usage () = print_string "prime [nth]\n" let _ = let argv = Sys.argv in let argc = Array.length Sys.argv in if argc <> 2 then begin print_usage (); exit 1; end else print_int (nth ((int_of_string Sys.argv.(1)) -1) primes)