twice :: (a -> a) -> a -> a
(twice f) x = f (f x)
twice' :: (a -> a) -> a -> a
twice' f = f . f
main = do
putStrLn $ show $ (twice (+1)) 0
putStrLn $ show $ (twice' (+1)) 0
putStrLn $ show $ twice_twice (+1) $ 0
putStrLn $ show $ twice_twice' (+1) $ 0
putStrLn $ show $ twice_twice_twice (+1) $ 0
putStrLn $ show $ twice_twice_twice' (+1) $ 0
putStrLn $ show $ twice_twice_twice'' (+1) $ 0
putStrLn $ show $ twice_twice_twice''' (+1) $ 0
putStrLn $ show $ n_twice 3 (+1) $ 0
putStrLn $ show $ n_twice 4 (+1) $ 0
twice_twice = twice twice
twice_twice' f = f . f . f . f
twice_twice_twice = twice twice twice
twice_twice_twice' = (twice twice) twice
twice_twice_twice'' = twice (twice twice)
twice_twice_twice''' f = f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f -- 16 not 8 times!
n_twice n f = foldr (.) id $ take (2^(2^(n-1))) (repeat f)
This entry was posted
on Tuesday, June 5th, 2007 at 5:08 pm and is filed under Haskell - SOE.
You can follow any responses to this entry through the RSS 2.0 feed.
You can leave a response, or trackback from your own site.