Zoeken…


Instantiefouten

Er wordt een instantatiefout gegenereerd als een argument niet voldoende wordt geïnstantieerd .

Van cruciaal belang is dat een instantatiefout niet kan worden vervangen door stille fout : in dergelijke gevallen zou falen betekenen dat er geen oplossing is , terwijl een instantatiefout betekent dat een instantie van het argument kan deelnemen aan een oplossing.

Dit in tegenstelling tot bijvoorbeeld-domein fout, die door stille mislukking kan worden vervangen zonder dat de declaratieve betekenis van een programma.

Algemene punten over foutafhandeling

Prolog biedt uitzonderingen , die deel uitmaken van de Prolog ISO-norm.

Een uitzondering kan worden gegooid met throw/1 en gevangen met catch/3 .

De ISO-norm definieert veel gevallen waarin fouten moeten of kunnen worden geworpen. De gestandaardiseerde uitzonderingen zijn allemaal de error(E,_) , waarbij E de fout aangeeft. Voorbeelden zijn instantiation_error , domain_error en type_error , die zien.

Een belangrijk predicaat in verband met uitzonderingen is setup_call_cleanup/3 , die zien.

Opruimen na uitzonderingen

Het predicaat setup_call_cleanup/3 , dat momenteel wordt overwogen voor opname in de Prolog ISO-standaard en wordt geleverd door een toenemend aantal implementaties, laat ons ervoor zorgen dat middelen correct worden vrijgemaakt nadat een uitzondering is gegenereerd.

Een typische aanroep is:

setup_call_cleanup(open(File, Mode, Stream), process_file(File), close(Stream))

Merk op dat in dit geval zelfs een uitzondering of onderbreking kan optreden nadat open/3 wordt aangeroepen. Om deze reden wordt de Setup fase atomair uitgevoerd. In Prolog-systemen die alleen call_cleanup/2 , is dit veel moeilijker uit te drukken.

Type- en domeinfouten

Een type fout treedt op als een argument is niet van de verwachte type. Voorbeelden van typen zijn:

  • integer
  • atom
  • list .

Als het predicaat van het verwachte type is, maar buiten het verwachte domein , wordt een domeinfout gegenereerd.

Een domeinfout is bijvoorbeeld toegestaan als een geheel getal tussen 0 en 15 wordt verwacht, maar het argument is het gehele getal 20.

Declaratief is dat een type- of domeinfout gelijk is aan stille mislukking , omdat geen enkele instantiatie een predicaat kan doen wiens argument van het verkeerde type of domein is.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow