Files
zzg b9bd39689e
ci / test (push) Canceled after 0s
initial commit
2026-09-25 21:40:55 -07:00

29 lines
637 B
Plaintext

// Closures capture their defining environment, so each counter is
// independent.
let makeCounter = fn() {
let n = 0;
fn() { n = n + 1; n }
};
let a = makeCounter();
let b = makeCounter();
puts(a(), a(), a()); // 1 2 3
puts(b()); // 1
// Higher-order functions.
let map = fn(arr, f) {
let out = [];
let i = 0;
while (i < len(arr)) { out = push(out, f(arr[i])); i = i + 1; }
out
};
puts(map([1, 2, 3, 4], fn(x) { x * x }));
let reduce = fn(arr, init, f) {
let acc = init;
let i = 0;
while (i < len(arr)) { acc = f(acc, arr[i]); i = i + 1; }
acc
};
puts(reduce([1, 2, 3, 4, 5], 0, fn(a, b) { a + b }));