1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

examples: add tree_of_nodes.v, based on a type Tree = Leaf | Node sumtype

This commit is contained in:
Delyan Angelov 2021-01-15 10:09:38 +02:00
parent c6099df418
commit 944bb294e3
No known key found for this signature in database
GPG Key ID: 66886C0F12D595ED

27
examples/tree_of_nodes.v Normal file
View File

@ -0,0 +1,27 @@
type Tree = Leaf | Node
struct Leaf {}
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 {
Leaf { int(0) }
Node { 1 + size(tree.left) + size(tree.right) }
}
}
fn main() {
node1 := Node{30, Leaf{}, Leaf{}}
node2 := Node{20, Leaf{}, Leaf{}}
tree := Node{10, node1, node2}
println('tree structure:\n $tree')
println('tree size: ${size(tree)}')
}