Shootout/Ack
From HaskellWiki
< Shootout
A Shootout entry for the ackermann function
1 Code
All the following entries have the same performance. The difference is loc. The idea is to beat the SML entry of 4 loc. Performance is already excellent.
Interestingly, all run much faster when compiled with -fasm.
2 Proposal
-- http://shootout.alioth.debian.org/ -- shortened by Bryn Keller, Einar Karttunen and Don Stewart import System main = getArgs >>= \[n] -> putStrLn . (("Ack(3,"++n++"): ")++) . show . ack 3 $ read n ack (0::Int) (n::Int) = n+1 ack m n = ack (m-1) $ if n == 0 then 1 else ack m (n-1)
3 Original entry
7 loc
{-# OPTIONS -O2 -fasm #-} -- $Id: ackermann-ghc.code,v 1.27 2006/01/08 22:44:56 igouy-guest Exp $ -- http://shootout.alioth.debian.org/ -- shortened by Bryn Keller and Einar Karttunen import System(getArgs) main = do ~[num] <- getArgs putStrLn ("Ack(3," ++ num ++ "): " ++ (show (ack 3 (read num)))) ack :: Int -> Int -> Int ack 0 n = n+1 ack m 0 = ack (m-1) 1 ack m n = ack (m-1) (ack m (n-1))
