Hallo,
manchmal gibt mir Prolog false und manchmal nicht. Ich hatte es so gelernt: ,,ist es nicht definiert dann ist es für Prolog false". Aber dann habe ich diesen Fall:
p(a,b).
p(a,c).
p(d,e).
p(d,f).
p(g,f).
q(h).
q(i).
q(j).
r(h, a).
r(i, d).
r(j, g).
s(X,Y,Z):- q(X), r(X, Y), p(Y, Z).
Das Query dazu ?- s(X,Y,f). Ersetzt man X mit h erhält man ?-r(h,Y),p(Y,f). Wenn ich jetzt Y ersetze mit a dann hätte ich erwartet, dass der mir false rausgibt da p(a,f) nicht definiert ist, aber er "failed" und sucht weiter. Die Lösungen sind X=i, Y=d und X=j, Y=g. Würde man als Query ?- p(a,f). eingeben erhält man false.
Ein anderes Beispiel wo false rauskommt:
append ( [] , L , L ) .
append ( [H|T1] , L2 , [H|T3]) :- append (T1,L2 ,T3)
Mit dem Query ?-append(X,X,[ ]). Lösungen sind X=[ ];false.
Bei beiden Beispielen hatte ich intuitiv die richtigen Lösungen raus. Nur würde ich jetzt gerne wissen wo der Unterschied besteht..
Schonmal vielen Dank:))