Ответы на вопросы “почему?” - это простое средство объяснения, описывающее одну локальную цепочку рассуждений. Следующая программа дополняет программу 4 возможностью объяснения, поясняющего полное доказательство решенного вопроса. Если для вашей фирмы требуется обучить сотрудника работу с компьютером то пройти курсы онлайн можно тут: http://tritec-education.ru/order-category?slug=01-microsoft.
% программа 8
% how(Goal) - объясняет как была доказана цель Goal
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).
interpret((ProofA,ProofB)):-!,
interpret(ProofA),
interpret(ProofB).
interpret((A:-'как было сказано')):-!,
nl,write(A),write(' <= как было сказано'),nl.
interpret('не доказуемо'(A)):-!,
nl,write(A),write(' <= не доказуемо'),nl.
interpret(Proof):-
fact(Proof,Fact),
nl,write(Fact),write(' - это факт'),nl.
interpret(Proof):-
rule(Proof,Head,Body,Proof1),
display_rule(rule(Head,Body)),
interpret(Proof1).
fact((Fact:-true),Fact).
rule((Goal:-Proof),Goal,Body,Proof):-
not(Proof=true),
extract_body(Proof,Body).
extract_body((ProofA,ProofB),(BodyA,BodyB)):-
!,
extract_body(ProofA,BodyA),
extract_body(ProofB,BodyB).
extract_body((Goal:-Proof),Goal).
extract_body('не доказуемо'(B),not(B)). |