Prolog Language
Gestione degli errori ed eccezioni
Ricerca…
Errori di istanziazione
Un errore di istanziazione viene generato se un argomento non è sufficientemente istanziato .
In modo critico, un errore di istanziazione non può essere sostituito da un errore silenzioso : fallire in questi casi significherebbe che non c'è soluzione , mentre un errore di istanziazione significa che un'istanza dell'argomento può partecipare a una soluzione.
Ciò è in contrasto con, ad esempio, l' errore del dominio , che può essere sostituito dall'errore silenzioso senza modificare il significato dichiarativo di un programma.
Punti generali sulla gestione degli errori
Prolog presenta eccezioni , che fanno parte dello standard ISO Prolog.
Un'eccezione può essere lanciata con throw/1
e catturata con catch/3
.
Lo standard ISO definisce molti casi in cui gli errori devono o possono essere lanciati. Le eccezioni standardizzate sono tutte l' error(E,_)
modulo error(E,_)
, dove E
indica l'errore. Gli esempi sono instantiation_error
, domain_error
e type_error
, che vedono.
Un predicato importante in relazione alle eccezioni è setup_call_cleanup/3
, che vedete.
Pulizia dopo le eccezioni
Il predicato setup_call_cleanup/3
, che viene attualmente considerato per l'inclusione nello standard ISO di Prolog e fornito da un numero crescente di implementazioni, ci consente di assicurare che le risorse siano correttamente liberate dopo che è stata generata un'eccezione.
Una tipica invocazione è:
setup_call_cleanup(open(File, Mode, Stream), process_file(File), close(Stream))
Si noti che un'eccezione o un'interruzione può verificarsi anche immediatamente dopo l' open/3
in questo caso. Per questo motivo, la fase di Setup
viene eseguita atomicamente . Nei sistemi Prolog che forniscono solo call_cleanup/2
, questo è molto più difficile da esprimere.
Digitare e gli errori di dominio
Si verifica un errore di tipo se un argomento non è del tipo previsto. Esempi di tipi sono:
-
integer
-
atom
-
list
.
Se il predicato è del tipo previsto, ma al di fuori del dominio previsto, viene generato un errore del dominio .
Ad esempio, un errore di dominio è ammissibile se è previsto un numero intero compreso tra 0 e 15, ma l'argomento è l'intero 20.
Dichiaratamente, un errore di tipo o dominio equivale a un errore silenzioso , poiché nessuna istanziazione può creare un predicato il cui argomento è del tipo o del dominio errati.