summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornodist <kevin.comas.git@gmail.com>2026-05-19 15:45:59 -0400
committernodist <kevin.comas.git@gmail.com>2026-05-19 15:45:59 -0400
commit390503adc3035b18b0c97f22f40f107521817397 (patch)
treec982e0e2de24472c6cbee35a3c86b94cfa493096
parent9145160d51bf3795c866bb9a2ac695963494eee5 (diff)
type checking
-rw-r--r--ack.kpl16
-rw-r--r--fib.kpl17
-rw-r--r--fib_import.kpl2
3 files changed, 24 insertions, 11 deletions
diff --git a/ack.kpl b/ack.kpl
index 1eb7694..f27af3e 100644
--- a/ack.kpl
+++ b/ack.kpl
@@ -2,19 +2,23 @@
// Ackermann function
`export ack : Fn[m; n] $ (
- ? !=(`type m; `type n) {
- `panic "m and n must be the same type"
+ t : `type m;
+ ? |(t != `type n; t != Int[Any; Any; Any]) {
+ `panic "m and n must be the same type of Int"
+ }
+ ? t = Int[Any; .signed; Any] {
+ ? |(m < 0; n < 0) { `return 0 }
}
? {
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)) }
+ &(m > 0; n = 0) { ack `sync (m - 1; 1) }
+ &(m > 0; n > 0) { ack `sync (m - 1; ack `sync (m; n - 1)) }
{ 0 }
}
)
`export ack_string : Fn[m; n] $ (
- String $ ("ack("; m; " "; n; ") = "; ack `call_sync (m; n); "\n")
+ String $ ("ack("; m; " "; n; ") = "; ack `sync (m; n); "\n")
)
`is_main Fn $ (
@@ -25,5 +29,5 @@
"Usage: "; args `get 0; " "; args `get 1; " <m> <n>\n"
)
}
- `print ack_string `call_sync (I64 $ args `get -2; I64 $ args `get -1)
+ `print ack_string `sync (I64 $ args `get -2; I64 $ args `get -1)
)
diff --git a/fib.kpl b/fib.kpl
index f049ba0..cb6b5ef 100644
--- a/fib.kpl
+++ b/fib.kpl
@@ -5,15 +5,24 @@
*/
`export fib : Fn[n] $ (
+ t : `type n
+ ? {
+ t = Int[Any; .signed; Any] {
+ ? n <= 0 { `return 0 }
+ }
+ t = Int[Any; .unsigned; Any] {
+ ? n = 0 { `return 0 }
+ }
+ { `panic "n must be a signed or unsigned Int" }
+ }
? {
- n <= 0 { 0 }
n < 3 { 2 }
- { `call_sync(fib; n - 1) + fib `call_sync n - 2 }
+ { `sync(fib; n - 1) + fib `sync n - 2 }
}
)
`export fib_string Fn[n] $ (
- String $ ("fib("; n; ") = "; fib `call_sync n; "\n")
+ String $ ("fib("; n; ") = "; fib `sync n; "\n")
)
`is_main Fn $ (
@@ -24,5 +33,5 @@
"Usage: "; args `get 0; " "; args `get 1; " <number>\n"
)
}
- `print fib_string `call_sync I64 $ args `get -1
+ `print fib_string `sync I64 $ args `get -1
)
diff --git a/fib_import.kpl b/fib_import.kpl
index 6d900b3..478e8ab 100644
--- a/fib_import.kpl
+++ b/fib_import.kpl
@@ -4,5 +4,5 @@
( fib_string ) : `import "./fib.kpl"
@ 0 .. 30 {
- `print fib_string `call_sync n
+ `print fib_string `sync n
}[n]