flang.dev — The Fuzion Language Portal
JavaScript seems to be disabled. Functionality is limited.
Fuzion
•
Idioms
•
Idiom # 128: Breadth-first traversing of a tree
Idiom # 128: Breadth-first traversing of a tree
See
programming-idioms.org
:
Code
breadth_first_traverse(f node -> unit, root node) => breadth_first_traverse(queue Sequence
) unit is match queue.asList nil => c Cons => f c.head breadth_first_traverse (c.tail ++ c.head.children) breadth_first_traverse [root]
What are effects?
Complete Example
ex128 is node(name string, children Sequence
) is breadth_first_traverse(f node -> unit, root node) => breadth_first_traverse(queue Sequence
) unit is match queue.asList nil => c Cons => f c.head breadth_first_traverse (c.tail ++ c.head.children) breadth_first_traverse [root] # World # ├─Europe # │ ├─Belarous # │ ├─Portugal # ├─Asia # ├─Oceania # NYI type inference: [] should work for Sequences.empty
five := node "Belarus" Sequences.empty
six := node "Portugal" Sequences.empty
two := node "Europe" [five, six] three := node "Asia" Sequences.empty
four := node "Oceania" Sequences.empty
one := node "World" [two, three, four] breadth_first_traverse (node -> say node.name) one
What are effects?
next: NYI: Idiom # 129: Breadth-first traversing in a graph