Files
lux/examples/datatypes.lux
2026-02-17 06:52:44 -05:00

43 lines
1.1 KiB
Plaintext

type Tree =
| Leaf(Int)
| Node(Tree, Tree)
fn sumTree(tree: Tree): Int =
match tree {
Leaf(n) => n,
Node(left, right) => sumTree(left) + sumTree(right),
}
fn depth(tree: Tree): Int =
match tree {
Leaf(_) => 1,
Node(left, right) => {
let leftDepth = depth(left)
let rightDepth = depth(right)
1 + if leftDepth > rightDepth then leftDepth else rightDepth
},
}
let myTree = Node(Node(Leaf(1), Leaf(2)), Leaf(5))
let treeSum = sumTree(myTree)
let treeDepth = depth(myTree)
fn safeDivide(a: Int, b: Int): Option<Int> = if b == 0 then None else Some(a / b)
fn showResult(result: Option<Int>): String =
match result {
None => "Division by zero!",
Some(n) => "Result: " + toString(n),
}
fn printResults(): Unit with {Console} = {
Console.print("Tree sum: " + toString(treeSum))
Console.print("Tree depth: " + toString(treeDepth))
Console.print("Safe divide 10/2: " + showResult(safeDivide(10, 2)))
Console.print("Safe divide 10/0: " + showResult(safeDivide(10, 0)))
}
let output = run printResults() with {}