Хотя предыдущее объяснение вычисления факториала 2! исчерпывающе понятно, оно имеет недостаток. Это чрезмерная полнота объяснения, что приводит, даже для очень маленькой базы знаний, к выводу слишком большого объема информации. Экранный текст, произведенный экспертной системой, имеющей сотни правил, становится невразумительным.
Поэтому дополняем программу 8 возможностью указать, что достаточно объяснять при получении решения. Для этого делаем небольшую модификацию программы и используем предикат explainThis(f(_,_)), который указывает вывод каких именно предикатов нужно объяснять.
% программа 9
:- dynamic explainThis/1.
how(Goal):-
solve(Goal,Proof),
interpret(Proof).
solve(true,true):-!.
solve((A,B),(ProofA,ProofB)):-!,
solve(A,ProofA),
solve(B,ProofB).
solve(not(A),'не доказуемо'(A)):-!,
not(solve(A,_)).
solve(A,(A:-Proof)):-
not system(A),
clause(A,B),
solve(B,Proof).
solve(A,(A:-true)):-
system(A),
A.
system(is(_,_)).
system(_=_).
system(_<_).
system(_>_).
system(write(_)).
system(nl).
Вам требуется разработка, продвижение и поддержка сайтов? Всегда уверенный и качественный подход к делу, современные технологии и приятное общение! Обращайтесь http://mysonar.ru |