Prolog Language
Avledningsträd
Sök…
Korrekt träd
Det korrektiva trädet (även sökträd eller derivatträdet) är ett träd som visar körningen av ett Prolog-program. Detta träd hjälper till att visualisera den kronologiska backspårningsprocessen som finns i Prolog. Trädets rot representerar den ursprungliga frågan och grenar skapas när valpunkter inträffar. Varje nod i trädet representerar således ett mål. Grenar blir bara blad när antingen sann / falsk har bevisats för det erforderliga (uppsättningen av) mål och sökning i Prolog utförs på ett djup från vänster till höger först .
Överväg följande exempel:
% Facts
father_child(paul,chris). % Paul is the father of Chris and Ellen
father_child(paul,ellen).
mother_child(ellen,angie). % Ellen is the mother of Angie and Peter
mother_child(ellen,peter).
% Rules
grandfather_grandchild(X,Y) :-
father_child(X,Z),
father_child(Z,Y).
grandfather_grandchild(X,Y) :-
father_child(X,Z),
mother_child(Z,Y).
När vi nu frågar:
?- grandfather_grandchild(paul,peter).
följande bevisträd visualiserar den första djup-sökprocessen:
?- grandfather_grandchild(paul,peter).
/ \
/ \
?- father_child(paul,Z1),father_child(Z1,peter). ?- father_child(paul,Z2),mother_child(Z2,peter).
/ \ / \
{Z1=chris} {Z1=ellen} {Z2=chris} {Z2=ellen}
/ \ / \
?- father_child(chris,peter). ?- father_child(ellen,peter). ?- mother_child(chris,peter). ?- mother_child(ellen,peter).
| | | / \
fail fail fail fail(*) success
(*) misslyckas för mother_child(ellen,angie)
där 'angie' inte matchar 'peter'
Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow