From ca0031431d100dea9c79257b43ebe2560267c63e Mon Sep 17 00:00:00 2001 From: Neemek Date: Wed, 15 Jul 2026 21:50:23 +0200 Subject: [PATCH] more examples --- examples/bad.ang | 40 +++++++++++++++++++++++++++++++ examples/blemish.ang | 20 ++++++++++++++++ examples/chars.ang | 15 ++++++++++++ examples/codegen.ang | 24 +++++++++++++++++++ examples/emoji.ang | 2 ++ examples/era3.ang | 11 +++++++++ examples/fails.ang | 4 ++++ examples/foo.ang | 8 +++++++ examples/imp.ang | 15 ++++++++++++ examples/inc.ang | 2 ++ examples/massacre.ang | 4 ++++ examples/network.ang | 8 +++++++ examples/neutral-pH.ang | 18 ++++++++++++++ examples/pos.ang | 21 +++++++++++++++++ examples/sqrt.ang | 6 +++++ examples/very_bad.ang | 8 +++++++ examples/warp.ang | 25 ++++++++++++++++++++ examples/worst.ang | 4 ++++ tests/forp.ang | 52 +++++++++++++++++++++++++++++++++++++++++ 19 files changed, 287 insertions(+) create mode 100644 examples/bad.ang create mode 100644 examples/blemish.ang create mode 100644 examples/chars.ang create mode 100644 examples/codegen.ang create mode 100644 examples/emoji.ang create mode 100644 examples/era3.ang create mode 100644 examples/fails.ang create mode 100644 examples/foo.ang create mode 100644 examples/imp.ang create mode 100644 examples/inc.ang create mode 100644 examples/massacre.ang create mode 100644 examples/network.ang create mode 100644 examples/neutral-pH.ang create mode 100644 examples/pos.ang create mode 100755 examples/sqrt.ang create mode 100644 examples/very_bad.ang create mode 100644 examples/warp.ang create mode 100644 examples/worst.ang create mode 100644 tests/forp.ang diff --git a/examples/bad.ang b/examples/bad.ang new file mode 100644 index 0000000..80c9cb7 --- /dev/null +++ b/examples/bad.ang @@ -0,0 +1,40 @@ +import "lib/math.ang" + +primes := [2] + +func is_prime(x: number) boolean { + i := 0 + while i < primes.length() && primes.at(i)*primes.at(i) < x { + if mod(x, primes.at(i)) == 0 { + return false + } + i = i + 1 + } + + return true +} + +n := 1 +max := 100000 + +while n < max { + n = n + 2 + + if is_prime(n) { + primes.append(n) + + # Update counter + print(char(0x0D)) + print(str(n)) + print("/") + print(str(max)) + print(char(0x09)) + print(str(roundd(n/max*100, 2))) + print("%") + print(char(0x09)) + print(str(primes.length())) + print(" primes") + } +} + +write(str(primes)) diff --git a/examples/blemish.ang b/examples/blemish.ang new file mode 100644 index 0000000..ee25ddf --- /dev/null +++ b/examples/blemish.ang @@ -0,0 +1,20 @@ +fn fib(n: int) -> int { + if n < 2 { + n + } else { + fib(n-1) + fib(n-2) + } +} + +println(fib(2)) + +fn other(n: int) -> int { + if n <= 0 { + n + } else { + println(n) + (n - 1) + } +} + +println(other(2)) diff --git a/examples/chars.ang b/examples/chars.ang new file mode 100644 index 0000000..343ccee --- /dev/null +++ b/examples/chars.ang @@ -0,0 +1,15 @@ + +MAX_WIDTH := 16 + +print(" ") +w := 1 +n := 0x21 +while n < 0xA0 { + print(char(n)) + n = n + 1 + w = w + 1 + if w >= MAX_WIDTH { + write("") + w = 0 + } +} diff --git a/examples/codegen.ang b/examples/codegen.ang new file mode 100644 index 0000000..7d44558 --- /dev/null +++ b/examples/codegen.ang @@ -0,0 +1,24 @@ + +passphrase := "Hello world!".split("") +start := [0, 0, 0] +modulus := 10 +base := byte("!") + +i := 0 +n := 0 +while n < passphrase.length() { + b := byte(passphrase.at(n)) + + v = start.at(i) + b - base + while v >= modulus { + v = v - modulus + } + + start.put(i, v) + + if i >= 3 { + i = 0 + } + n = n + 1 +} + diff --git a/examples/emoji.ang b/examples/emoji.ang new file mode 100644 index 0000000..09f0cb1 --- /dev/null +++ b/examples/emoji.ang @@ -0,0 +1,2 @@ + +write(char(0x12) + char(0x85) + char(0x07)) diff --git a/examples/era3.ang b/examples/era3.ang new file mode 100644 index 0000000..966a458 --- /dev/null +++ b/examples/era3.ang @@ -0,0 +1,11 @@ +fn counter() -> (fn() -> int) { + i := 0 + + fn() -> int { i = i + 1 } +} + +next := counter() + +println(next()) +println(next()) +println(next()) diff --git a/examples/fails.ang b/examples/fails.ang new file mode 100644 index 0000000..8e3174d --- /dev/null +++ b/examples/fails.ang @@ -0,0 +1,4 @@ +import "lib/honning.ang" + +write(_bell+_italic+"Hello "+_underline+"world "+_strike+"micheal"+_reset) + diff --git a/examples/foo.ang b/examples/foo.ang new file mode 100644 index 0000000..1047386 --- /dev/null +++ b/examples/foo.ang @@ -0,0 +1,8 @@ + +fn foo(n: int) -> str { + if n % 2 == 0 { + "foo" + } else { + "bar" + } +} diff --git a/examples/imp.ang b/examples/imp.ang new file mode 100644 index 0000000..0ccb3ed --- /dev/null +++ b/examples/imp.ang @@ -0,0 +1,15 @@ + +func is_cool(x: number|string) boolean { + if x == "cool" { + return true + } else if x == 69 { + return true + } + + return nil +} + +write(str(is_cool("not cool"))) +write(str(is_cool("cool"))) +write(str(is_cool(0))) +write(str(is_cool(69))) diff --git a/examples/inc.ang b/examples/inc.ang new file mode 100644 index 0000000..8a697a7 --- /dev/null +++ b/examples/inc.ang @@ -0,0 +1,2 @@ + +foo := include "foo.ang" diff --git a/examples/massacre.ang b/examples/massacre.ang new file mode 100644 index 0000000..6dbde3c --- /dev/null +++ b/examples/massacre.ang @@ -0,0 +1,4 @@ +a := fn b(n: int) -> int { + n + 1 +} + diff --git a/examples/network.ang b/examples/network.ang new file mode 100644 index 0000000..86ba041 --- /dev/null +++ b/examples/network.ang @@ -0,0 +1,8 @@ + +func get(url: string) string { + res := request("GET", url, "") + + return res.text +} + +write(get("https://www.neemek.com/hello.txt")) diff --git a/examples/neutral-pH.ang b/examples/neutral-pH.ang new file mode 100644 index 0000000..f867a72 --- /dev/null +++ b/examples/neutral-pH.ang @@ -0,0 +1,18 @@ +import "../lib/math.ang" + +# Inputs +c := 1.0*pow(10.0, -2.0) + +println(c) +pH := -log(c, 10.0) + +println(pH) + +if pH == 7.0 { + println("pH-en er nøytral (=7)") +} else if pH < 7.0 { + println("pH-en er sur (<7)") +} else { + println("pH-en er basisk (>7)") +} + diff --git a/examples/pos.ang b/examples/pos.ang new file mode 100644 index 0000000..2eda099 --- /dev/null +++ b/examples/pos.ang @@ -0,0 +1,21 @@ + +type Vec2 = (float, float) + +fn add(a: Vec2, b: Vec2) -> Vec2 { + (a[0] + b[0], a[1] + b[1]) +} + +fn sub(a: Vec2, b: Vec2) -> Vec2 { + (a[0] - b[0], a[1] - b[1]) +} + +fn dot(a: Vec2, b: Vec2) -> float { + a[0]*b[0] + a[1]*b[1] +} + +u := (0.0, 1.0) +v := (2.0, 3.0) + +println(add(u, v)) +println(sub(u, v)) +println(dot(u, v)) diff --git a/examples/sqrt.ang b/examples/sqrt.ang new file mode 100755 index 0000000..f013699 --- /dev/null +++ b/examples/sqrt.ang @@ -0,0 +1,6 @@ +#!/Users/neemek/Code/anglais/cli/cli run + +import "lib/math.ang" + +x := sqrt(9485739448) +write(str(x)) diff --git a/examples/very_bad.ang b/examples/very_bad.ang new file mode 100644 index 0000000..dd18680 --- /dev/null +++ b/examples/very_bad.ang @@ -0,0 +1,8 @@ + +a := 0 +while a < 10 { + print(".") + a = a + 1 +} + +write("") diff --git a/examples/warp.ang b/examples/warp.ang new file mode 100644 index 0000000..3186556 --- /dev/null +++ b/examples/warp.ang @@ -0,0 +1,25 @@ + +# Aliases +type Receiver = fn() -> any +type Sender = fn(any) + +fn new_channel() -> (Sender, Receiver) { + queue := [] + + fn send(n: any) { + queue.push(n) # mutate in-place + } + + fn recv() -> any | nil { + queue.pop() + } + + (send, recv) +} + +(send, recv) := new_channel() + +( + send:, + recv:, +) diff --git a/examples/worst.ang b/examples/worst.ang new file mode 100644 index 0000000..47b90db --- /dev/null +++ b/examples/worst.ang @@ -0,0 +1,4 @@ +import "worst.ang" + +write("Hello world!") + diff --git a/tests/forp.ang b/tests/forp.ang new file mode 100644 index 0000000..0891ab6 --- /dev/null +++ b/tests/forp.ang @@ -0,0 +1,52 @@ + +fn range(from: int, to: int) -> (fn() -> (int, bool)) { + i := from - 1 + + fn() -> (int, bool) { + i = i + 1 + if i >= to { + (-1, false) + } else { + (i, true) + } + } +} + +for i in range(0, 10) { + println(i) +} + +fn chars(s: str) -> (fn() -> (str, bool)) { + i := 0 + + fn() -> (str, bool) { + if i >= s.length() { + ("", false) + } else { + c := s[i] + i = i + 1 + + (c, true) + } + } +} + +for c in chars("hello") { + print(c) + print(" ") +} + +println("") + +fn items(l: [any]) -> (fn() -> (any, bool)) { + i := 0 + + fn() -> (any, bool) { + if i >= l.length() { + (nil, false) + } else { + i = i + 1 + (l[i - 1], true) + } + } +}