Aufsammeln von Wegknoten
Aufsammeln in einer Liste
Wir betrachten weiterhin die Wegsuche in gerichteten Graphen ohne Kreise und verdeutlichen die Ergebnisse am folgenden Beispielgraphen.
![Graph](https://inf-schule.de/content/8_deklarativ/3_logischeprogrammierung/4_deklarativeprogrammierung/3_station_loesunggraphenproblem/3_station_wegknoten/graph1_ohne_kreise.png)
Die folgenden Regeln zur Festlegung eines weg0
-Prädikats benutzen eine Liste,
um Knoten entlang eines Weges aufzusammeln.
% Graph kante(a, b). kante(a, c). kante(b, d). kante(b, e). kante(c, e). kante(c, f). kante(d, g). kante(d, e). kante(f, b). kante(f, i). kante(h, e). kante(h, b). kante(i, e). kante(i, h). % Weg weg0(X, X, []). weg0(X, Y, [Z|W]) :- kante(X, Z), weg0(Z, Y, W).
Die "Logik" der beiden Regeln zur Festlegung des weg0
-Prädikats kann
so in Worten beschrieben werden:
Regel 1: weg0(X, X, []). Die leere Liste [] enthält die Wegknoten eines Weges von X nach X (ohne das X). Regel 2: weg0(X, Y, [Z|W]) :- kante(X, Z), weg0(Z, Y, W). Die Liste [Z|W] enthält die Wegknoten eines Weges von X nach Y (ohne das X), wenn es eine Kante von X nach Z gibt und wenn die Liste W die Wegknoten eines Weges von Z nach Y (ohne das Z) enthält.
Aufgabe 1
Teste das weg0
-Prädikat mit geeigneten Anfragen.
?- weg0(a, b, W). ...
Aufgabe 2
Was leistet das folgendermaßen festgelegte weg
-Prädikat?
% Weg weg0(X, X, []). weg0(X, Y, [Z|W]) :- kante(X, Z), weg0(Z, Y, W). weg(X, Y, [X|W]) :- weg0(X, Y, W).
Teste es mit geeigneten Anfragen. Erkläre das Verhalten.