Ich möchte ein Prädikat (Prolog) erstellen, das einen Baum nimmt und eine Liste von Listen zurückgibt, und jede Liste ist ein Baumpfad. Der Baum ist als Baum (Root, LeftTree, RightTree) definiert. Haben Sie bitte Vorschläge?Baumpfad in einer Liste von Listen
1
A
Antwort
4
Dieses recht ungewöhnlich ist (es ist häufiger für eine Beziehung zwischen einem Baum und einer flachen Liste aller Knoten beispielsweise zu fragen, für die DCGs eine gute Passform ist), vielleicht so:
tree_list(nil, []).
tree_list(tree(Node,Left,Right), [Lefts,Node,Rights]) :-
tree_list(Left, Lefts),
tree_list(Right, Rights).
Beispiel:
?- tree_list(tree(a,tree(b,nil,tree(d,nil,nil)),tree(c,nil,nil)), Ts).
Ts = [[[], b, [[], d, []]], a, [[], c, []]].
Diese Darstellung ist verschwenderisch (Sie wissen, dass alle nicht-leeren Listen 3 Elemente haben, also warum nicht einen ternären Begriff anstelle einer Liste verwenden?) und meiner Meinung nach unnötig (weil Sie schon die Baumdarstellung an erster Stelle), aber wer weiß, wofür es gut ist. ..