:- dynamic tak/1.
:- dynamic nie/1.

jest_to('morska', d('jest to ryba morska', [P1])) :- czy('zyje w morzu', P1).
jest_to('akwariowa', d('jest to ryba akwariowa', [P1])) :- czy('mozna ja trzymac w akwarium', P1).
jest_to('nieakwariowa', d('jest to ryba nieakwariowa', [P1])) :- czy_nie('mozna ja trzymac w akwarium', P1).


ryba_to('blazenek', d('Jest to blazenek', [P1, P2, P3])) :- jest_to('morska', P1), jest_to('akwariowa', P2), 
	czy('jest zolty', P3).

ryba_to('konik morski', d('Jest to konik morski', [P1, P2, P3])) :- jest_to('morska', P1), jest_to('akwariowa', P2),   
	czy_nie('jest zolty',  P3).

ryba_to('kolcobrzuch', d('Jest to kolcobrzuch', [P1, P2])) :- jest_to('morska', P1), czy('ma kolce',  P2).

ryba_to('rekin', d('Jest to rekin', [P1, P2, P3])) :- jest_to('morska', P1), czy_nie('ma kolce',  P2),
 czy('jest drapiezna', P3).

ryba_to('plaszczka', d('Jest to plaszczka', [P1, P2, P3])) :- jest_to('morska', P1), czy_nie('ma kolce',  P2),
 czy_nie('jest drapiezna', P3).

ryba_to('mieczyk', d('Jest to mieczyk', [P1, P2, P3, P4])) :- jest_to('akwariowa', P1), czy_nie('drapiezna',  P2),
 czy('zyworodna', P3), czy('ma miecz', P4).

ryba_to('gupik', d('Jest to gupik', [P1, P2, P3, P4])) :- jest_to('akwariowa', P1), czy_nie('drapiezna',  P2),
 czy('zyworodna', P3), czy_nie('ma miecz', P4).

ryba_to('glonojad', d('Jest to glonojad', [P1, P2, P3, P4])) :- jest_to('akwariowa', P1), czy_nie('drapiezna',  P2),
 czy_nie('zyworodna', P3), czy('zyje przy dnie', P4).

ryba_to('pyszczak yellow', d('Jest to pielegnica pyszczak yellow', [P1, P2, P3, P4])) :- jest_to('akwariowa', P1), czy('drapiezna',  P2), czy('inkubuje iskre w pysku', P3), czy('jest zolty', P4).

ryba_to('pielegnica mekka', d('Jest to pielegnica mekka', [P1, P2, P3, P4])) :- jest_to('akwariowa', P1), czy('drapiezna',  P2), czy('inkubuje iskre w pysku', P3), czy_nie('jest zolty', P4).

ryba_to('skalar', d('Jest to skalar', [P1, P2, P3])) :- jest_to('akwariowa', P1), czy('drapiezna',  P2), czy_nie('inkubuje iskre w pysku', P3).

ryba_to('piskorek', d('Jest to piskorek', [P1, P2, P3, P4])) :- jest_to('akwariowa', P1), czy_nie('drapiezna',  P2), czy('ma dlugie cialo', P3), czy('zyje przy dnie', P4). 

ryba_to('ostronos', d('Jest to ostronos', [P1, P2, P3, P4])) :- jest_to('akwariowa', P1), czy_nie('drapiezna',  P2), czy('ma dlugie cialo', P3), czy_nie('zyje przy dnie', P4) .

ryba_to('piskorz', d('Jest to piskorz', [P1, P2, P3])) :- jest_to('nieakwariowa', P1), czy('ma dlugie cialo', P2), czy('zyje przy dnie',  P3).

ryba_to('pstrag', d('Jest to pstrag', [P1, P2, P3])) :- jest_to('nieakwariowa', P1), czy_nie('ma dlugie cialo', P2), czy('zyje w potoku', P3).

ryba_to('strzelba', d('Jest to strzelba', [P1, P2, P3])) :- jest_to('nieakwariowa', P1), czy('ma dlugie cialo', P2), czy('zyje w potoku', P3).

ryba_to('leszcz', d('Jest to leszcz', [P1, P2, P3, P4])) :- jest_to('nieakwariowa', P1), czy_nie('ma dlugie cialo', P2), czy_nie('zyje w potoku', P3), czy('ma splaszczone cialo', P4).

ryba_to('karp', d('Jest to karp', [P1, P2, P3, P4])) :- jest_to('nieakwariowa', P1), czy_nie('ma dlugie cialo', P2), czy_nie('zyje w potoku', P3), czy_nie('ma splaszczone cialo', P4).

ryba_to('szczupak', d('Jest to szczupak', [P1, P2, P3])) :- jest_to('nieakwariowa', P1), czy('ma dlugie cialo', P2), czy_nie('zyje przy dnie',  P3).


do_bazy('tak', X) :- assert(tak(X)), !.
do_bazy('nie', X) :- assert(nie(X)).


czy(X, d(X, [])) :- tak(X), !.
czy(X, _) :- nie(X), !, fail.
czy(X, d(X, [])) :- write('Czy '),write(X),write('? '), read(Odp),
do_bazy(Odp, X), Odp='tak'.

czy_nie(X, d(NX, [])) :- nie(X), !, concat('nie ', X, NX).
czy_nie(X, _) :- tak(X), !, fail.
czy_nie(X, d(NX, [])) :- write('Czy '),write(X),write('? '), read(Odp),
do_bazy(Odp, X), Odp='nie', concat('nie ', X, NX).

ryby:-retractall(tak(_)), retractall(nie(_)), ryba_to(Rodzaj, Dowod), !,
nl, write('Jest to prawdopodobnie '), write(Rodzaj), write('.'), nl,
write('Uzasadnienie:'), nl, write(Dowod).

ryby:- write('Nie umiem powiedziec co to za ryba'), nl.

%  wypisz_dowodl(_, []) :- !.
%  wypisz_dowodl(W, [H|T]) :- wypisz_dowod(W, H), wypisz_dowodl(W, T).
  

%  wypisz_dowod(W, d(S, D)) :-  write(S), nl, wypisz_dowodl(W, D).

