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))))
Так норм?
Здравствуйте, varenikAA, Вы писали:
using System;
using System.Console;
using System.Linq;
variant Node {
| Text {text : string}
| Element { name : string; nodes : list[Node] }
}
def print(tree, add) {
def отступ()
{
WriteLine();
Write(string.Concat(Enumerable.Repeat(' ', add)))
}
match(tree) {
| Node.Text(text) => {
отступ();
Write("(" + text);
}
| Node.Element(name, nodes) => {
отступ();
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);
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Здравствуйте, DarthSidius, Вы писали:
using System;
using System.Console;
using System.Linq;
variant Node {
| Text {text : string}
| Element { name : string; nodes : list[Node] }
}
def print(tree, add) {
WriteLine();
Write(string.Concat(Enumerable.Repeat(' ', add)))
match(tree) {
| Node.Text(text) => {
Write("(" + text);
}
| Node.Element(name, nodes) => {
Write("(" + name);
foreach(node in nodes)
print(node, add + 4);
}
}
Write(")");
}
print(Node.Element("root",
[Node.Element("branches",
[Node.Element("name",
[Node.Text("Alice")]),
Node.Element("name", [Node.Text("Bob")])])]),0);
WriteLine();