We often search for the solution to a goal using several clauses for some predicate. For example, we might have a social security calculation which tries to assign how much money to give a claimant. Here is a fragment of program:
calculate_benefit(Claim_Number,Nationality,Age,Other_Details):-If we reach the situation where we realise that the whole search is doomed then we may want to say something informally like `stop this line of approach to the solution and any other corresponding line'. In the above, if we find we are trying to assign benefit to a martian then we make the decision that calculate_benefit/4 should fail and therefore that there is no point in trying to use any remaining clauses to find a solution.Nationality = british,
calculate_british_entitlement(Age,Other_Details).
calculate_benefit(Claim_Number,Nationality,Age,Other_Details):-
Nationality = martian,
give_up.
calculate_benefit(Claim_Number,Nationality,Age,Other_Details):-
Nationality = french,
calculate_french_entitlement(Age,Other_Details).
In practice, we need to make use of this kind of action. Again, we are potentially asking Prolog to behave abnormally.
In fact, in all these situations, we are asking Prolog to behave in a non-standard way. Whatever the complications, it is hard top make do without ways to: