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.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow