Don Stewart wrote:
default(Int)
divisors i = filter (\j -> i `rem`j == 0) (enumFromTo 1 (i-1))
main = print $ filter (\i -> i == sum (divisors i)) (enumFromTo 1 10000)
...
So almost identical types to the C program (bar for the return [Int]).
Finally, we can manually translate the C code into a confusing set of nested
loops with interleaved IO,
how lazy is `print` supposed to be? If it's strict, we need to return /
accumulate a list (and in this case, that is not very time-consuming
because there are only four numbers in the list)
from http://haskell.org/onlinereport/standard-prelude.html
print x = putStrLn (show x)
show on lists is lazy and doesn't matter that it's not for Ints
putStrLn :: String -> IO ()
putStrLn s = do putStr s
putStr "\n"
putStr :: String -> IO ()
putStr s = mapM_ putChar s
okay, mapM_ makes it lazy.
putChar :: Char -> IO ()
putChar = primPutChar
(It's easy to get confused with OS buffering effects too...)
so it should ALL be able to fuse, with no intermediate lists, I think
(not sure about [Char] from show... or whether fusion works with IO
sequencing...)
Isaac
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe