Suche…


Instanziierungsfehler

Ein Instanziierungsfehler wird ausgelöst, wenn ein Argument nicht ausreichend instanziiert ist .

Kritisch ist, dass ein Instantiierungsfehler nicht durch einen stillen Fehler ersetzt werden kann : Wenn in einem solchen Fall ein Fehler auftritt, bedeutet dies, dass keine Lösung vorliegt, während ein Instantiierungsfehler bedeutet, dass eine Instanz des Arguments an einer Lösung beteiligt ist.

Dies steht im Gegensatz zu beispielsweise einem Domänenfehler , der durch einen stillen Ausfall ersetzt werden kann, ohne die deklarative Bedeutung eines Programms zu ändern.

Allgemeine Punkte zur Fehlerbehandlung

Prolog enthält Ausnahmen , die Teil des ISO-Standards von Prolog sind.

Eine Ausnahme kann mit throw/1 geworfen und mit catch/3 gefangen werden.

Der ISO-Standard definiert viele Fälle, in denen Fehler ausgelöst werden müssen oder dürfen. Bei den standardisierten Ausnahmen handelt es sich ausschließlich um error(E,_) , wobei E den Fehler angibt. Beispiele sind instantiation_error , domain_error und type_error .

Ein wichtiges Prädikat in Verbindung mit Ausnahmen ist setup_call_cleanup/3 .

Aufräumen nach Ausnahmen

Mit dem Prädikat setup_call_cleanup/3 , das derzeit für die Aufnahme in den Prolog-ISO-Standard in Betracht gezogen wird und von einer zunehmenden Anzahl von Implementierungen bereitgestellt wird, können wir sicherstellen, dass Ressourcen nach einem Ausnahmefehler ordnungsgemäß freigegeben werden.

Ein typischer Aufruf ist:

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

Beachten Sie, dass in diesem Fall sogar unmittelbar nach dem Aufruf von open/3 eine Ausnahme oder ein Interrupt auftreten kann. Aus diesem Grund wird die Setup Phase atomar durchgeführt . In Prolog-Systemen, die nur call_cleanup/2 bereitstellen, ist dies viel schwieriger auszudrücken.

Typ- und Domainfehler

Ein Typfehler tritt auf, wenn ein Argument nicht den erwarteten Typ hat . Beispiele für Typen sind:

  • integer
  • atom
  • list

Wenn das Prädikat vom erwarteten Typ ist, jedoch außerhalb der erwarteten Domäne , wird ein Domänenfehler ausgelöst .

Ein Domänenfehler ist beispielsweise zulässig, wenn eine ganze Zahl zwischen 0 und 15 erwartet wird, das Argument jedoch die ganze Zahl 20 ist.

Ein Typ- oder Domänenfehler ist gleichbedeutend mit einem unbeaufsichtigten Fehler , da keine Instanziierung ein Prädikat, dessen Argument den falschen Typ oder die falsche Domäne aufweist, erfolgreich machen kann.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow