diff options
| author | nodist <kevin.comas.git@gmail.com> | 2026-05-19 12:30:40 -0400 |
|---|---|---|
| committer | nodist <kevin.comas.git@gmail.com> | 2026-05-19 12:30:40 -0400 |
| commit | a496efcd5d4660da359ce4702b5293698f115dda (patch) | |
| tree | c07a9ba92f301c9c6854d9a2c271bb70412760bc | |
| parent | 0e12eb8f94783800247d20b4c29546d1941af020 (diff) | |
add ackerman example
| -rw-r--r-- | ack.kpl | 29 | ||||
| -rw-r--r-- | fib.kpl | 8 | ||||
| -rw-r--r-- | fib_import.kpl | 2 |
3 files changed, 35 insertions, 4 deletions
@@ -0,0 +1,29 @@ + +// Ackermann function + +`export ack : Fn[m; n] $ ( + ? !=(`type m; `type n) { + `exit "m and n must be the same type and above zero" + } + ? { + m = 0 { n + 1 } + &(m > 0; n = 0) { ack `call_sync (m - 1; 1) } + &(m > 0; n > 0) { ack `call_sync (m - 1; ack `call_sync (m; n - 1)) } + { 0 } + } +) + +`export ack_string : Fn[m; n] $ ( + String $ ("ack("; m; " "; n; ") = "; ack `call_sync (m; n); "\n") +) + +`is_main Fn $ ( + ( args ) : `use "sys" + ? 4 != `length args { + `return `error String $ ( + "Got: "; " " `join args; "\n" + "Usage: "; args `get 0; " "; args `get 1; " <m> <n>\n" + ) + } + `print ack_string `call_sync (I64 $ args `get -2; I64 $ args `get -1) +) @@ -1,5 +1,8 @@ -// Fibonacci sequence for all numeric types +/* + Fibonacci sequence + n can be any signed or unsigned integer type +*/ `export fib : Fn[n] $ ( ? { @@ -9,7 +12,6 @@ } ) - `export fib_string Fn[n] $ ( String $ ("fib("; n; ") = "; fib `call_sync n; "\n") ) @@ -22,5 +24,5 @@ "Usage: "; args `get 0; " "; args `get 1; " <number>\n" ) } - `print `call_sync fib_string `call_sync I64 $ args `get -1 + `print fib_string `call_sync I64 $ args `get -1 ) diff --git a/fib_import.kpl b/fib_import.kpl index 86b6824..6d900b3 100644 --- a/fib_import.kpl +++ b/fib_import.kpl @@ -4,5 +4,5 @@ ( fib_string ) : `import "./fib.kpl" @ 0 .. 30 { - `print `call_sync fib_string `call_sync n + `print fib_string `call_sync n }[n] |
