26 lines
574 B
Agda
26 lines
574 B
Agda
module Ackermann where
|
||
|
||
open import Data.Nat using (ℕ ; zero ; suc ; _+_)
|
||
|
||
ack : ℕ → ℕ → ℕ
|
||
ack zero n = n + 1
|
||
ack (suc m) zero = ack m 1
|
||
ack (suc m) (suc n) = ack m (ack (suc m) n)
|
||
|
||
|
||
open import Agda.Builtin.IO using (IO)
|
||
open import Agda.Builtin.Unit using (⊤)
|
||
open import Agda.Builtin.String using (String)
|
||
open import Data.Nat.Show using (show)
|
||
|
||
postulate putStrLn : String → IO ⊤
|
||
{-# FOREIGN GHC import qualified Data.Text as T #-}
|
||
{-# COMPILE GHC putStrLn = putStrLn . T.unpack #-}
|
||
|
||
main : IO ⊤
|
||
main = putStrLn (show (ack 3 9))
|
||
|
||
|
||
-- Output:
|
||
-- 4093
|