Печать дерева
От: varenikAA  
Дата: 25.09.19 12:50
Оценка:
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))))


Так норм?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.