%====================== NÄIDE 1 ====================
% Omaduste pärimine klasside vahel
%==================================================
:- dynamic vahetu_eellane/1.

% Klass-alamklass suhe:
is_a(elusolend, eluvorm).
is_a(taim, eluvorm).
is_a(selgroogne, elusolend).
is_a(lehm,selgroogne).
is_a(selgrootu, elusolend).
is_a(oistaim, taim).
is_a(mitteoistaim, taim).
is_a(kapsas,oistaim).
is_a(maasi,lehm).

% Klassi omadused:
toitub(eluvorm).
hingab(eluvorm).
paljuneb(eluvorm).
kasvab(eluvorm).
liigub(elusolend).
eats(lehm,kapsas).
eats(selgrootu,taim).

%Abireeglid esivanema leidmiseks:
%alamhulk(X,X).
alamhulk(X,Y):-  is_a(X,Y).
alamhulk(X,Y):-  is_a(W,Y), alamhulk(X,W).

%Reeglid:
hingab(M):- alamhulk(M,N), hingab(N).
liigub(P):- alamhulk(P,Q), liigub(Q).
toitub(R):- alamhulk(R,S), toitub(S).
kasvab(V):- alamhulk(V,W), kasvab(W).
paljuneb(X):- alamhulk(X,Y), paljuneb(Y).

eats1(X,Y):- alamhulk(X,V), alamhulk(Y,W),eats(V,W).

% TESTPÄRING: eats1(maasi,kapsas).
%=================== END NÄIDE 1 ===================

%====================== NÄIDE 2 ====================
% on_eriliik(See, Selle)
on_eriliik(nelinurk,hulknurk).
on_eriliik(romb, nelinurk).
on_eriliik(ruut, romb).
on_eriliik(Kes,Kelle):-
	vahetu_eellane(KesX),
	on_eriliik(KesX,Kelle),
	KesX \=Kelle, 		% <---------------------------
	retract(vahetu_eellane(_)),
	assert(vahetu_eellane(Kelle)).

hulknurk(koosneb,[nurkadest,loikudest]).

% Rombile iseloomulikud lahtri väärtused
romb(kyljed, vordsed).
romb(nurgad, ebavordsed).

% Ruudule iseloomulikud lahtri väärtused
ruut(symmeetriline, 4).
nelinurk(kylgi,4).

% Pärimisreegel objekti omaduste väärtustamiseks
ruut(Atribuut, Vaartus):-
	assert(vahetu_eellane(ruut)),
	on_eriliik(ruut, Freim),		% Leiab esivanemklassi nime
	Subgoal =.. [Freim, Atribuut,Vaartus],	% Saab atribuudi päritud väärtuse 
	Subgoal.


%TESTPÄRING1:	ruut(kyljed, Missugused).
%VASTUS:	Missugused = vordsed
% TESTPÄRING2:	ruut(koosneb,X).
%=================== END NÄIDE 2 ===================



	