1 pred1(X,Z):-parent(X,Z). pred1(X,Z):-parent(X,Y), pred1( Y, Z). parent(pam, bob). parent(pam, bob). parent(tom, bob). parent(tom, bob). parent(tom, liz). parent(tom, liz). parent(bob, ann). parent(bob, ann). parent(bob, pat). parent(bob, pat). parent(pat,jim). parent(pat,jim). Y = bob by rule pr1by rule pr2 no pred1(tom, pat) parent(tom, pat) parent(tom, Y) pred1(Y, pat) by fact parent(tom, bob) pred1(bob, pat) yes parent(bob, pat) by rule pr1
2 parent(pam, bob). parent(pam, bob). parent(tom, bob). parent(tom, bob). parent(tom, liz). parent(tom, liz). parent(bob, ann). parent(bob, ann). parent(bob, pat). parent(bob, pat). parent(pat,jim). parent(pat,jim). parent(ann,Y’’) pred2(Y’’,pat) parent(pat,Y’’’) pred2(Y’’’,pat) ann ile başlayan parent ilişkisi bulamadığından No pr1 pr2 pr1 pr2 pr1 pr2 pr1 pr2 jim ile başlayan parent ilişkisi bulamadığından No bob ile başlayan 2 parent ilişkisi (ann ve pat) bulunduğundan ikisini de dene pr1 tom ile başlayan 2 parent ilişkisi (bob ve liz) bulunduğundan ikisini de dene
3 parent(pam, bob). parent(pam, bob). parent(tom, bob). parent(tom, bob). parent(tom, liz). parent(tom, liz). parent(bob, ann). parent(bob, ann). parent(bob, pat). parent(bob, pat). parent(pat,jim). parent(pat,jim). pred3(tom,Y’) parent(Y’,pat) pred3(X, Z) :- parent(X, Z). pred3(X, Z) :- pred3( X, Y), parent(Y, Z).
4 parent(pam, bob). parent(pam, bob). parent(tom, bob). parent(tom, bob). parent(tom, liz). parent(tom, liz). parent(bob, ann). parent(bob, ann). parent(bob, pat). parent(bob, pat). parent(pat,jim). parent(pat,jim).
Backtracking Control Backtracking’i kontrol etmek için iki operatör: CUT -!, argüman almaz, her zaman true, backtracking’i durdurur. FAIL – her zaman false, backtracking’e devam ettirir. loop :- goal, fail. loop. Loop çağrıldığında goal her seferinde farklı değerler için tekrarlı olarak tüm olası alternatifler bitene kadar çalıştırılır, En sonunda Loop true olarak tamamlanır.
Cut p :- a,b. p :- c,d. (a b) (c d) p :- a, !, b. p :- c,d. (a b) (not(a) c d) p :- a, b, !. p :- c,d. (a b) ((not(a) not(b)) c d) p :- !,a, b. p :- c,d. ? (a b)
fail father(leonard,katherine). father(carl,jason). father(carl,marilyn). everybody:- father(X,Y), write(X),nl, fail. everybody. fail bir sonuç bulunsa bile arama işlemine devam edilmesini sağlar.