Set Prolog Flags and Use Catch/3
Assuming SWI Prolog
1) The prolog_flags can change error behavior.
First allow the system to catch the error and report it. The unknown
flag is for unknown predicates such as fruitID/1
.
set_prolog_flag(report_error,true).
set_prolog_flag(unknown,error).
Now when the wrong predicate arity is used, there should be an error message like this:
?- fruitid(5).
ERROR: toplevel: Undefined procedure: fruitid/1 (DWIM could not correct goal)
2) To trap exceptions such as this in code,
Wrap the goal in a catch/3 predicate.
The settigs from 1) are stil required.
This is the way to trap undefined predicate in code,
or to trap any exception for that matter.
Replace format/3 with the desired handler:
while_running_some_program:-
catch(foodid(5),
error(Err,_Context),
format('You done goofed! ~w\n', [Err])),
rest_of_code.