-- The Great Computer Language Shootout -- http://shootout.alioth.debian.org/ -- Based on the SML version, written by Matthias Blume. -- Implemented in Haskell by Don Stewart -- import System; import Data.Bits; import Data.Word; import Text.Printf; import Data.Char main = do (w::Word32) <- getArgs >>= readIO . head printf "P4\n%d %d\n" (fromIntegral w::Int) (fromIntegral w::Int) >> yl 0 w w yl y h w = if y < h then xl 0 y 0 8 h w else return () xl x y b n h w | x == w = putChar (chr $ b `shiftL` n) >> yl (y+1) h w | otherwise = do (b',n') <- if n == 0 then putChar (chr b) >> return (0,8) else return (b,n) xl (x+1) y (b'+b'+ fromEnum (p x y w h)) (n'-1) h w p (x::Word32) y w h = lp 0.0 0.0 50 (f x * 2.0 / f w - 1.5) (f y * 2.0 / f h - 1.0) where f = fromIntegral lp r i k cr ci | r2 + i2 > (4.0 :: Double) = 0 :: Word32 | k == (0 :: Word32) = 1 | otherwise = lp (r2-i2+cr) ((r+r)*i+ci) (k-1) cr ci where r2 = r*r ; i2 = i*i