%DATABASE %positivePairs(s,int) %negativePairs(s,int) :-dynamic positivePairs/2. :-dynamic negativePairs/2. do_expert:-do_consulting,write("Введіть будь-який символ."),nl,read(_), clear_db. clear_db:-retractall(positivePairs(_,_)), retractall(negativePairs(_,_)). do_consulting:-ill_is(X,KU),!,nl,write('Хвороба '), write(X), write(' з вірогідністю '), write(KU), write('%'),nl,becauseof. do_consulting:-nl,write('Не вдалося знайти хворобу!'),nl,becauseof. ask(X,Y,KU):-write("Ознака хвороби > "), write(X), write(" "), write(Y), write("?(y/n)"), read(Reply), askku(KU), remember(X,Y,Reply,KU). positive(_,Y,KU):-positivePairs(Y,KU),!. positive(X,Y,KU):-not(negative(X,Y,_)),!,ask(X,Y,KU). negative(_,Y,KU):-negativePairs(Y,KU),!. remember(_,Y,y,KU):-asserta(positivePairs(Y,KU)). remember(_,Y,n,KU):-asserta(negativePairs(Y,KU)),fail. /*Knowledge base*/ ill_is("Алергія",KURes):-positive(має,"почервоніння шкіри",KU1),positive(має,"чхання",KU2),min(KU1,KU2,KU3),getku(KU3,95,KURes),!. ill_is("ОРВІ",KURes):-positive(має,"почервоніння горла",KU1),positive(має,"температура",KU2),min(KU1,KU2,KU3),getku(KU3,95,KURes),!. ill_is("Грип",KURes):-positive(має,"чхання",KU1),positive(має,"температура",KU2),min(KU1,KU2,KU3),getku(KU3,95,KURes),!. becauseof :- positivePairs(Str,KU), write(" + "), write(Str), write(" ("), write(KU), write("%)\n"), fail. becauseof :- negativePairs(Str,KU), write(" - "), write(Str), write(" ("), write(KU), write("%)\n"), fail. becauseof :- retractall(positivePairs(_,_)),retractall(negativePairs(_,_)),!. min(KU1,KU2,KU1):-KU1 =< KU2. min(KU1,KU2,KU2):-KU1 > KU2. askku(KU):-write(" Наскільки впевнені?(%)-"),read(KU),KU=<100,KU>=0,!. askku(KU):-writeln(" ! Тільки число між 0 & 100 !"),askku(KU). getku(KU1,KU2,KURes):- KURes is KU1*KU2/100.