
neubauer:
dons@cse.unsw.edu.au (Donald Bruce Stewart) writes:
Fannkuch entry by Bertram Felgenhauer Mandelbrot entry
I've done some benchmarking of the current entries for fannkuch and mandelbrot, and have proposed final entries for these two tests.
Using >>= of the list monad in the current Fannkuch proposal (permutations) hides some costly ++ applications that can be also optimized away:
Instead of writting
permutations l = foldr perm' [l] [2..length l] where perm' n l = l >>= take n . iterate (rotate n)
saying something like
permutations l = foldr perm' [l] [2..length l]
perm' n = foldr (takeIter n (rotate n)) []
takeIter :: Int -> (a -> a) -> a -> [a] -> [a] takeIter 0 f x rest = rest takeIter n f x rest = x : takeIter (n-1) f (f x) rest
gains us another 5% or so.
Ah! Good idea Matthias. I've updated the proposed entry on the wiki. Cheers, Don