Set Drapeaux Prolog et utilisation Catch/3
En supposant SWI Prolog
1) Les prolog_flags peuvent modifier le comportement d'erreur. D'abord permettre au système d'attraper l'erreur et de le signaler. Le drapeau unknown
est pour des prédicats inconnels tels que fruitID/1
.
set_prolog_flag(report_error,true).
set_prolog_flag(unknown,error).
Maintenant, quand le mauvais arité sous-jacente est utilisé, il devrait y avoir un message d'erreur comme ceci:
?- fruitid(5).
ERROR: toplevel: Undefined procedure: fruitid/1 (DWIM could not correct goal)
2) Pour intercepter des exceptions comme celle-ci dans le code, Enroulez le but dans une prise/3 prédicat. Les settigs de 1) sont encore nécessaires. C'est le moyen de piéger le prédicat non défini dans le code, ou de piéger n'importe quelle exception pour cela. Remplacer format/3 avec le gestionnaire de votre choix:
while_running_some_program:-
catch(foodid(5),
error(Err,_Context),
format('You done goofed! ~w\n', [Err])),
rest_of_code.