SWI-Prolog ha ISO-compliant exception handling, quindi è possibile generare errori as defined in the standard.
?- throw(error(type_error(list, foo), context(foo/0, 'Must be a list'))).
ERROR: foo/0: Type error: `list' expected, found `foo' (an atom) (Must be a list)
Questo non è solo difficile da digitare/utilizzare: è anche dipendente dall'implementazione. Invece, si può (e dovrebbe) utilizzare library(error), che fornisce il must_be/2
predicate (purtroppo, è molto difficile trovare questo sul sito SWI-Prolog se non si sa cosa si sta cercando):
?- must_be(list, [foo]).
true.
?- must_be(list, foo).
ERROR: Type error: `list' expected, found `foo' (an atom)
Suppongo che altre implementazioni Prolog che supportano la gestione delle eccezioni forniscano funzionalità molto simili.
fonte
2015-11-13 09:04:11
In questo caso particolare, ci sono buone ragioni per non produrre un errore. Vedi [questo confronto] (https://www.complang.tuwien.ac.at/ulrich/iso-prolog/length) per il comportamento di vari sistemi in questa situazione. – false