using System;
using System.Console;
variant Node {
| Text {text : string}
| Element { name : string; nodes : list[Node] }
}
def print(tree, add) {
match(tree) {
| Node.Text(text) => {
WriteLine();
foreach(_ in [0..add])
Write(" ");
Write("(" + text);
}
| Node.Element(name, nodes) => {
WriteLine();
foreach(_ in [0..add])
Write(" ");
Write("(" + name);
foreach(node in nodes)
print(node, add + 4);
}
}
Write(")");
}
def println(tree, add) {
print(tree, add);
WriteLine();
}
println(Node.Element("root",
[Node.Element("branches",
[Node.Element("name",
[Node.Text("Alice")]),
Node.Element("name", [Node.Text("Bob")])])]),0);
Получилось:
(root
(branches
(name
(Alice))
(name
(Bob))))
Так норм?