
start :- tisztit, 	
	 write('Adatfájl neve: '), read(INPUT),consult(INPUT),
	 jatek,
	 write('Mentsem? (i/n) '), read(i), mentes,!.
start.


jatek:-  repeat, megkeres(allat(X),X), 
	 writef('%w \nFolytassam? (i/n) ',[X]),
 	 \+ read(i), !.


megkeres(KERDES, X) :-
           clause(KERDES, TORZS),
            (   TORZS=true  ->  rakerdez(KERDES), !;   
		kerdez(TORZS), !, megkeres(TORZS, X)
            );   
	    bovit(KERDES, X).


rakerdez(KERDES) :- KERDES =..[_,X],
		  writef('%w? (i/n)',[X]), read(i).

kerdez(KERDES) :- KERDES =..[X,_],
		  writef('%w? (i/n)',[X]), read(i).


bovit(KERDES, X) :-
        write('Hogy hívják? '),
        read(X),
        write('Miben különbözik? '),
        read(TULAJDONSAG),
        KERDES =..[NEV|_],
        FEJ =..[NEV, Y],
        TORZS =..[TULAJDONSAG, Y],
        assert((FEJ:-TORZS)),
        TENY=..[TULAJDONSAG, X],
        assert(TENY).


mentes:- write('A fájl neve: '), read(Output), mentes(Output).

mentes(FILE):-
	tell(FILE),
    	(topDown(allat(X),X,FEJ), FEJ=..[NEV,X],
       	 listing(NEV/1), fail
	;
	 told
	).


%tudásbázis top-down bejárása

%topDown(kérdés,a_kérdés_paramétere,következő_kerdes).

topDown(KERDES,_,KERDES).
topDown(KERDES,X,KOVETKEZO):-
  	clause(KERDES,TORZS), TORZS \= true, topDown(TORZS,X,KOVETKEZO).



%tudásbázis bottom-up bejárása

%bottomUp(kérdés,a_kérdés_paramétere,következő_kerdes).

bottomUp(KERDES,X,KOVETKEZO):-
	clause(KERDES,TORZS), TORZS \= true, bottomUp(TORZS,X,KOVETKEZO).
bottomUp(KERDES,_,KERDES).



tisztit:-
  	bottomUp(allat(X),X,FEJ), retractall(FEJ), fail
	; 
	true.
  