On Friday 27 September 2002 05:19 pm, Hal Daume III wrote: > There is a one pass solution using mfix. This looks like: > > mfix (\ ~s -> ioaA a 1 s) > > where ioaA is defined as: > > ioaA a i s > > | i > sz = return 0 > | otherwise = > > do s' <- ioaA a (i+1) s > v <- readArray a i > writeArray a i (v/s) > return (s' + v) > where (_,sz) = Data.Array.IO.bounds a > > Using unboxed arrays is not possible in the fixed point version > (loop). On the normal version, it just about triples the speed across the > board.
Hi, I'm not sure if it's mfix we should blame here. Can you please experiment with the following version of normalize and report on running times? norm a = mdo s <- ioaA 1 s id return () where (_, sz) = bounds a ioaA i s acc | i > sz = return (acc 0) | True = do v <- readArray a i writeArray a i (v/s) ioaA (i+1) s (\x -> v + acc x) It'd be interesting to see the results especially for very large inputs (i.e. >= half a million elements.) -Levent. _______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell