Shootout/Ack
< Shootout
Jump to navigation
Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
A Shootout entry for the ackermann function
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.
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)
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))