SDA SE Wiki

Software Engineering for Smart Data Analytics & Smart Data Analytics for Software Engineering

User Tools

Site Tools


Differences

This shows you the differences between two versions of the page.

Link to this comparison view

research:jtransformer:debugbeispiel [2018/05/09 01:59] (current)
Line 1: Line 1:
 +Betrachten wir folgendes einfaches Programm: Es soll mit reachable Erreichbarkeit in einem Graphen darstellen.
 +
 +''​reachable(X,​X).\\ ​
 +reachable(A,​B) :- edge(A,​B).\\ ​
 +reachable(A,​B) :- edge(A,C), reachable(C,​B).\\ \\ 
 +edge(A,B) :- e(A,​B).\\ ​
 +edge(A,B) :- e(B,A).\\ \\ 
 +e(1,​2).\\ ​
 +e(2,​3).\\ ​
 +e(1,3).\\ \\ 
 +e(4,​5).''​
 +
 +
 +
 +Wenn wir dieses Programm verwenden, um die Erreichbarkeit zu prüfen, sollten wir //Yes// oder //No// erhalten. Wenn die Knoten tatsächlich erreichbar sind, dann tun wir das auch, aber bei unerreichbaren Knoten tritt statt dessen auf: ''?​- reachable(1,​4).\\ ​
 +ERROR: Out of local stack''​
 +
 +
 +
 +Wir haben also einen Fehler gemacht, nur wo? Am besten wir sehen uns die Auswertung genauer an. Die besondere Anweisung **trace.** ermöglicht uns, die Suche nach der Lösung genauer zu betrachten. (mit <​Enter>​ geht man einen Schritt weiter). Wenn wir das tun, stellen wir fest, das wir nach einiger Zeit immer im 1-2-3 Kreis laufen, und immer mehr durchläufe anhäufen, ohne je festzustellen das wir im Kreis liefen. Das müßen wir also verhindern. Wir müßen also irgendwie mitzählen, welche Knoten wir schon als Zwischenstation verwendet haben. Am besten in einer Liste, in die wir alle Knoten einfügen, die wir besuchen. Das korregierte Programm sieht also so aus:
 +
 +
 +
 +''​reachable(X,​X).\\ ​
 +reachable(A,​B) :- edge(A,​B).\\ ​
 +reachable(A,​B) :- reachable(A,​ B,[]).\\ \\ 
 +reachable(A,​ A, _).\\ 
 +reachable(A,​ B, X) :- edge(A,C), nmember(C, X), reachable(C,​ B, [C|X]).\\ \\ 
 +nmember(A, []).\\ ​
 +nmember(A, [B|T]) :- A \= B, nmember(A,​T).\\ \\ 
 +edge(A,B) :- e(A,​B).\\ ​
 +edge(A,B) :- e(B,A).\\ \\ 
 +e(1,​2).\\ ​
 +e(2,​3).\\ ​
 +e(1,3).\\ \\ 
 +e(4,​5).''​
 +
 +
 +
 +
 +
  
research/jtransformer/debugbeispiel.txt · Last modified: 2018/05/09 01:59 (external edit)

SEWiki, © 2019