aboutsummaryrefslogtreecommitdiff
path: root/v_windows/v/old/examples/tree_of_nodes.v
diff options
context:
space:
mode:
Diffstat (limited to 'v_windows/v/old/examples/tree_of_nodes.v')
-rw-r--r--v_windows/v/old/examples/tree_of_nodes.v27
1 files changed, 27 insertions, 0 deletions
diff --git a/v_windows/v/old/examples/tree_of_nodes.v b/v_windows/v/old/examples/tree_of_nodes.v
new file mode 100644
index 0000000..76d69a2
--- /dev/null
+++ b/v_windows/v/old/examples/tree_of_nodes.v
@@ -0,0 +1,27 @@
+type Tree = Empty | Node
+
+struct Empty {}
+
+struct Node {
+ value int
+ left Tree
+ right Tree
+}
+
+// NB: a match expression, infers the type of its result
+// from the type of the return value in the first branch,
+// => it needs an explicit int(0) cast here:
+fn size(tree Tree) int {
+ return match tree {
+ Empty { int(0) }
+ Node { 1 + size(tree.left) + size(tree.right) }
+ }
+}
+
+fn main() {
+ node1 := Node{30, Empty{}, Empty{}}
+ node2 := Node{20, Empty{}, Empty{}}
+ tree := Node{10, node1, node2}
+ println('tree structure:\n $tree')
+ println('tree size: ${size(tree)}')
+}