diff options
| author | Baitinq <[email protected]> | 2025-03-12 00:47:31 +0100 |
|---|---|---|
| committer | Baitinq <[email protected]> | 2025-03-12 00:47:43 +0100 |
| commit | da0788140e7afbc9b0bcbb937a29e2b08de08ec7 (patch) | |
| tree | ef6435c7c91f40926f01f5faa9b4dbc2946a5caf /examples | |
| parent | Codegen: add bundled llvm (diff) | |
| parent | Codegen: Fix bug with functions without name (diff) | |
| download | interpreter-da0788140e7afbc9b0bcbb937a29e2b08de08ec7.tar.gz interpreter-da0788140e7afbc9b0bcbb937a29e2b08de08ec7.tar.bz2 interpreter-da0788140e7afbc9b0bcbb937a29e2b08de08ec7.zip | |
Merge branch 'master' into native-llvm
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/10.src | 10 | ||||
| -rw-r--r-- | examples/12.src | 42 | ||||
| -rw-r--r-- | examples/13.src | 31 | ||||
| -rw-r--r-- | examples/7.src | 2 | ||||
| -rw-r--r-- | examples/8.src | 18 |
5 files changed, 83 insertions, 20 deletions
diff --git a/examples/10.src b/examples/10.src index 0ec38ea..59f91e1 100644 --- a/examples/10.src +++ b/examples/10.src @@ -1,14 +1,16 @@ let main = () => i64 { let counter = 0; - while !(counter == 10) { + while counter < 10 { print(counter); counter = counter + 1; }; - while counter == 0 { - print(0); + while true { + if counter == 10 { + return counter; + }; }; - return counter; + return 1; }; diff --git a/examples/12.src b/examples/12.src index 1bff280..a680efa 100644 --- a/examples/12.src +++ b/examples/12.src @@ -1,8 +1,38 @@ -let print_int = (n: i64) => i64 { - print(n); - return n; -}; +let main = () => i64 { + let factorial = (n: i64) => i64 { + let f = (acc: i64, n: i64) => i64 { + if n == 0 { + return acc; + }; + return f(acc * n, n - 1); + }; + return f(1, n); + }; + + let is_even = (n: i64) => bool { + if n % 2 == 0 { + return true; + }; + return false; + }; + + let sum_if = (predicate: (i64) => bool, limit: i64) => i64 { + let sum = 0; + let i = 0; + while i < limit { + if predicate(i) { + sum = sum + i; + }; + i = i + 1; + }; + return sum; + }; + + let fact_val = factorial(6); + print(fact_val); + + let even_sum = sum_if(is_even, 20); + print(even_sum); -let main = (argc: i64) => i64 { - return print_int(argc); + return 0; }; diff --git a/examples/13.src b/examples/13.src new file mode 100644 index 0000000..eeb5b32 --- /dev/null +++ b/examples/13.src @@ -0,0 +1,31 @@ +let main = () => i64 { + /* Iterative Fibonacci using while loop. */ + let fibonacci_iter = (n: i64) => i64 { + let a = 0; + let b = 1; + let i = 0; + while i < n { + let temp = b; + b = a + b; + a = temp; + i = i + 1; + }; + return a; + }; + + /* Recursive GCD using Euclid's algorithm. */ + let gcd = (a: i64, b: i64) => i64 { + if b == 0 { + return a; + }; + return gcd(b, a % b); + }; + + let fib_val = fibonacci_iter(10); + print(fib_val); + + let gcd_val = gcd(48, 18); + print(gcd_val); + + return 0; +}; diff --git a/examples/7.src b/examples/7.src index c0690b6..b10a350 100644 --- a/examples/7.src +++ b/examples/7.src @@ -2,7 +2,7 @@ let ten = () => i64 { return () => i64 { return 10; }(); -}; /* TODO */ +}; let main = () => i64 { let i = 4; diff --git a/examples/8.src b/examples/8.src index 73ea7aa..985ca77 100644 --- a/examples/8.src +++ b/examples/8.src @@ -1,14 +1,14 @@ -let fib = (n: i64) => i64 { - if n == 0 { - return 0; - }; - if n == 1 { - return 1; +let main = () => i64 { + let fib = (n: i64) => i64 { + if n == 0 { + return 0; + }; + if n == 1 { + return 1; + }; + return fib(n-2) + fib(n-1); }; - return fib(n-2) + fib(n-1); -}; -let main = () => i64 { let result = fib(30); print(result); return result; |