flang.dev — The Fuzion Language Portal
JavaScript seems to be disabled. Functionality is limited.
Fuzion
•
Idioms
•
Idiom # 16: Depth-first traversing of a binary tree
Idiom # 16: Depth-first traversing of a binary tree
See
programming-idioms.org
:
Code
traverse (f T -> unit) unit is match binTree.this nil => n binTreeNode => n.left.traverse f f n.val n.right.traverse f
What are effects?
Running Example
# a binTreeNode is a value plus left and right sub-trees # binTreeNode(T ordered T .type, val T, left, right binTree T) ref is # add element to this tree, return resulting tree # add (v T) binTree T is l := if (v < val) (left .add v) else left r := if (v > val) (right.add v) else right binTreeNode val l r # a binTree is either a binTreeNode or an empty tree represented by nil # binTree(T ordered T .type) : choice
is # add element to this tree, return resulting tree # add (v T) binTree T is match binTree.this nil => binTreeNode v nil nil n binTreeNode => n.add v # traverse this tree # traverse (f T -> unit) unit is match binTree.this nil => n binTreeNode => n.left.traverse f f n.val n.right.traverse f for tree binTree string := nil, tree.add x x in ["dog", "elephant", "cat", "cat", "cat", "cat", "lion", "ant", "bee", "albatros", "hyena", "horse", "frog"] else tree.traverse (s -> say s)
What are effects?
next: Idiom # 17: Create a Tree data structure