Ackermann function: Difference between revisions

Line 916:
 
=={{header|Agda}}==
{{works with|Agda|2.56.23}}
{{libheader|agda-stdlib v0v1.137}}
<syntaxhighlight lang="agda">
open import Data.Nat
open import Data.Nat.Show
open import IO
module Ackermann where
 
open import Data.Nat using (ℕ ; zero ; suc ; _+_)
ack : ℕ -> ℕ -> ℕ
 
ack : ℕ ->->
ack zero n = n + 1
ack (suc m) zero = ack m 1
ack (suc m) (suc n) = ack m (ack (suc m) n)
 
main = run (putStrLn (show (ack 3 9)))
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 = run (putStrLn (show (ack 3 9)))
 
 
-- Output:
-- 4093
</syntaxhighlight>
 
NoteThe the unicode ℕUnicode characters, they can be inputentered in emacsEmacs agdaAgda modeas usingfollows: "\bN". Running in bash:
* ℕ : \bN
* → : \to
* ⊤ : \top
 
Running in Bash:
 
<syntaxhighlight lang="bash">
92

edits