:- dynamic allat/1.

allat(macska).


start:-  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(TORZS) :- TORZS =..[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).


/*
Használt predikátum, operátor:

	clause, illetve =..

Nézze meg őket a help-ben, ide csak egészen rövid utalást írok:


	clause(szabályfej, szabálytörzs)

Az =.. listává alakít egy predikátumot vagy listából predikátumot készít.
Pl.:

?- valami(hello, X) =.. List.

    List = [valami, hello, X]

    ?- Term =.. [barmi, valami(1)]

    Term = barmi(valami(1))
*/