Diagnose missing solution
Description
Diagnosing missing solution
Source: The Art of Prolog
Download
Listing
/*
missing_solution(A,Goal) :-
If A is a non-provable true ground goal,then Goal is a
true ground goal which is uncovered by the program.
*/
:- op( 900, fy, not).
missing_solution((A,B),Goal) :- !,
( not A,missing_solution(A,Goal);
A, missing_solution(B,Goal)).
missing_solution(A,Goal) :-
clause(A,B),
query_clause((A :- B)), !,
missing_solution(B,Goal).
missing_solution(A,A) :-
not system(A).
query_clause(Clause) :-
writeln(['Enter a true ground instance of ', Clause,
'if there is no such,or "no" otherwise']),
read(Answer),
!, check_answer(Answer,Clause).
check_answer(no,Clause) :- !, fail.
check_answer(Clause,Clause) :- !.
check_answer(Answer,Clause) :-
write('Illegal Answer'),
!, query_clause(Clause).
writeln([T|Ts]) :- write(T), write(' '), writeln(Ts).
writeln([]) :- nl.
% Program 17.16: Diagnosing missing solution