У меня есть простая программа на Прологе, в отладке которой мне нужна помощь. Суть в том, чтобы расширить программу путем сопоставления с образцом, чтобы создать средство проверки доказательств для логики высказываний. Моя проблема заключается в том, что я получаю «нет», когда я ожидаю «да», и мое «исправление» (предоставляющее базовый случай для valid_proof_aux) по-прежнему дает мне два решения, и я не знаю, почему.
Пока не знаю, как заняться отладкой Prolog, извините.
%call:
valid_proof([p],p,[[1, p, premise]])
%src:
reverse_it([],Z,Z).
reverse_it([H|T],Z,Acc) :- reverse_it(T,Z,[H|Acc]).
valid_proof(Prems,Goal,Proof):-
last(Proof, [_, Goal, _]),
reverse_it(Proof, RevP, []),
valid_proof_aux(Prems, RevP) .
valid_proof_aux(Prems,
[[_,Prop,premise] | T]):-
memberchk(Prop,Prems),
valid_proof_aux(Prems,T).
%my 'fix'
valid_proof_aux(_, []) :- true .