diff --git a/examples/lib/mathx.lumen b/examples/lib/mathx.lumen new file mode 100644 index 0000000..9aaa84c --- /dev/null +++ b/examples/lib/mathx.lumen @@ -0,0 +1,40 @@ +// Numeric helpers built on the math builtins. + +fn factorial(n) { + var product = 1 + var i = 2 + while (i <= n) { + product = product * i + i = i + 1 + } + return product +} + +fn gcd(a, b) { + var x = abs(a) + var y = abs(b) + while (y != 0) { + let remainder = x % y + x = y + y = remainder + } + return x +} + +fn clamp(value, low, high) { + return max(low, min(value, high)) +} + +fn isPrime(n) { + if (n < 2) { + return false + } + var divisor = 2 + while (divisor * divisor <= n) { + if (n % divisor == 0) { + return false + } + divisor = divisor + 1 + } + return true +} diff --git a/examples/lib/text.lumen b/examples/lib/text.lumen new file mode 100644 index 0000000..07a2505 --- /dev/null +++ b/examples/lib/text.lumen @@ -0,0 +1,32 @@ +// Text helpers built on the standard string methods. + +fn capitalize(text) { + if (text.len() == 0) { + return text + } + let head = text.substring(0, 1).upper() + let rest = text.substring(1, text.len()) + return head + rest +} + +fn repeat(text, times) { + var joined = "" + var i = 0 + while (i < times) { + joined = joined + text + i = i + 1 + } + return joined +} + +fn padLeft(text, width, filler) { + var padded = text + while (padded.len() < width) { + padded = filler + padded + } + return padded +} + +fn trimAll(parts) { + return parts.map(fn(part) { return part.trim() }) +}