I have some problem with my code here. Let's say I have a knowledge base like this:
university('University of Cambridge', 1, 'United Kingdom', 90.3, 92.8, 89.4).
university('University of Oxford', 2, 'United Kingdom', 88.9, 94.8, 88.0).
university('ETH Zurich - Swiss Federal Institute of Technology', 3, 'Switzerland', 86.4, 94.4, 92.2).
university('University of Edinburgh', 4, 'United Kingdom', 83.7, 88.8, 83.6).
Then I call it out like this: (Ignore the checkC(Country)/checkC(_))
checkC(Country):-
    university(U, R, Country, _, _, _),nl,
    write('University: '),write(U),nl,
    write('Rank: '),write(R),nl,
    write('Country: '),write(Country),nl,
    fail; true, nl,
    write('************'), nl,nl.
checkC(_):-
    write('Country not found'),nl,nl.
My question is, why is it if the user inputs a random country name not within the knowledge base, the write('Country not found') won't come out, I found out that it has something to do with the fail; true.
Any help?
                        
While the
fail; truetrick is nice for the command line, gathering multiple solutions is usually done via the predicatesfindall,bagofandsetof.I used
formatfor readabilities sake.If you are using
swipl,maplistcomes in handy:If you don't have
format/2look if you havewritef/2orprintf/2.