Sök…


Instantiation-fel

Ett instansfel kastas om ett argument inte är tillräckligt instanserat .

Kritiskt sett kan ett inställningsfel inte ersättas med tyst fel : Om man inte lyckas i sådana fall skulle det inte finnas någon lösning , medan ett inställningsfel innebär att en instans av argumentet kan delta i en lösning.

Detta står i kontrast till för exempel-domänen fel, som kan ersättas med tysta fel utan att ändra deklarativ innebörden av ett program.

Allmänna punkter om felhantering

Prolog har undantag som ingår i Prolog ISO-standarden.

Ett undantag kan kastas med throw/1 och fångas med catch/3 .

ISO-standarden definierar många fall där fel måste eller kan kastas. De standardiserade undantagen är alla error(E,_) , där E indikerar felet. Exempel är instantiation_error , domain_error och type_error , som se.

Ett viktigt predikat i samband med undantag är setup_call_cleanup/3 , som se.

Städning efter undantag

Predikatet setup_call_cleanup/3 , som för närvarande övervägs för inkludering i Prolog ISO-standarden och tillhandahålls av ett ökande antal implementeringar, låter oss se till att resurser frigörs korrekt efter att ett undantag kastats.

En typisk kallelse är:

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

Observera att ett undantag eller avbrott till och med kan inträffa omedelbart efter att open/3 har kallats i detta fall. Av denna anledning Setup är fasen utförs atomärt. I Prolog-system som bara ger call_cleanup/2 är detta mycket svårare att uttrycka.

Typ- och domänfel

Ett typfel uppstår om ett argument inte är av den förväntade typen . Exempel på typer är:

  • integer
  • atom
  • list .

Om predikatet är av den förväntade typen, men utanför den förväntade domänen , tas ett domänfel upp.

Till exempel är ett domänfel tillåtet om ett heltal mellan 0 och 15 förväntas, men argumentet är heltalet 20.

Deklarativt är ett typ- eller domänfel likvärdigt med tyst fel , eftersom ingen instans kan göra ett predikat vars argument är av fel typ eller domän lyckas.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow