[Haskell-cafe] newbie optimization question

Prabhakar Ragde plragde at uwaterloo.ca
Sun Oct 28 09:13:31 EDT 2007


For the purposes of learning, I am trying to optimize some variation of 
the following code for computing all perfect numbers less than 10000.

divisors i = [j | j<-[1..i-1], i `mod` j == 0]
main = print [i | i<-[1..10000], i == sum (divisors i)]

I know this is mathematically stupid, but the point is to do a moderate 
nested-loops computation. On my 2.33GHz dual-core MacBookPro, the 
obvious C program takes about .3 seconds, and a compiled OCaML program 
(tail recursion, no lists) about .33 seconds. The above takes about 4 
seconds.

I've tried using foldl', and doing explicit tail recursion with strict 
accumulators, but I can't get the running time below 3 seconds. Is it 
possible to come within striking distance of the other languages? 
Thanks. --PR


More information about the Haskell-Cafe mailing list