next up previous contents
Next: Strukturer Up: Prolog Previous: Prolog

Dataobject i Prolog


?- parent(X, _).  %Vilka av personerna i databasen ar foraldrar

X= nisse;	% Vi far till svar med namn pa foraldrarna men inte barnens namn

X= kalle;

no

Vi kan satta ihop ett program som haller reda familjeforhallandena i en slakt genom att satta ihop fakta och klausuler t.ex

%%program for att trana pa sokande i rolog databas
%%Vi satter ihop lite fakta om slakten

parent(pam, bob).
parent(tom, bob).
parent(tom, liz).
parent(bob, ann).
parent(bob, pat).
parent(pat, jim).

female(pam).
male(tom).
male(bob).
female(liz).
female(pat).
female(ann).
male(jim).

sex(pam, feminine).
sex(tom, masculine).
sex(bob, masculine).
sex(liz, feminine).
sex(pat, feminine).
sex(ann, feminine).
sex(jim, masculine).
%For att Y skall vara barn till X maste X vara foralder till Y
offspring(Y,X) :-
	parent(X,Y).		%Om Y ar barn till X da ar X foralder till Y

%Om X ar foralder till Y och X ar en kvinna da ar X en mamma 
mother(X,Y) :-
	parent(X,Y),female(X).
%Om X ar foralder till Y och X ar en man da ar X en pappa 
father(X,Y) :-
	parent(X,Y), male(X).
%Om X ar foralder till Y och Y ar foralder till Z da ar X forfader till Z
grandparent(X,Z) :-
	parent(X,Y),parent(Y,Z). %Om X ar forfader till Z da maste
                                       %% X vara foralder till Y och Y foralder till Z
%Om X ar en syster till Y da har de samma foraldrar och X ar en kvinna
sister(X,Y) :-
	offspring(X, Z),offspring(Y,Z), female(X).
	%For at fa reda pa en foretradare till X gar det att gora rekursiva anrop tills
	%ingen mer hittas
predecessor(X,Z):-
	parent(X,Z).

predecessor(X,Z) :-
	parent(X,Y),predecessor(Y,Z).
Det var ett exempel hur man kan koppla ihop data i en databas och lata prolog soka igenom efter det kriterium och fragor man staller.




1999-05-22