Browse thread
[Caml-list] A (much less) frustrated beginner
-
Tyler Eaves
- Aleksey Nogin
- Nicolas Cannasse
- james woodyatt
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: | 2003-12-24 (01:05) |
From: | Nicolas Cannasse <warplayer@f...> |
Subject: | Re: [Caml-list] A (much less) frustrated beginner |
> I think I'm beginning to get it. Attached find my second try at a prime > number generator. > > This one is distinguished from my first by two important differences: > > 1: It is written (I think) in a completly functional style > 2: It actually *works*. It's pretty fast too. Running as an optimized > binary on my system (Athlon @ 950mhz under FreeBSD 5.1) it can calculate > the first 15104 primes (Highest is 165161) with one minute of CPU time. > > Thanks again for all your help! Check the difference with this one , getting rid of the exceptions : let rec isprime n primes = let rec test = function | [] -> true | x :: l -> if n mod x = 0 then false else if sqrt (float_of_int n) < (float_of_int x) then true else loop l in if test primes then begin Printf.printf "%d is PRIME!\n" n; isprime (n+2) (primes @ [n]) end else isprime (n+2) primes there is another improvement : @ is linear, so is not efficient here. we could write ( n :: primes ) the append the element at the head of the list (in constant time) but then the list will be reverse constructed. One trick is to manually modify the list using low-level - undocumented and unsafe Obj operations so we can construct the list directly in the good order, but that require some hacks. Nicolas Cannasse ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners