Szukaj…


Błędy instancji

Błąd instancji jest wyrzucane, jeśli argument nie jest dostatecznie instancja.

Krytycznie błąd wystąpienia nie może zostać zastąpiony przez cichą awarię : niepowodzenie w takich przypadkach oznaczałoby brak rozwiązania , podczas gdy błąd wystąpienia oznacza, że wystąpienie argumentu może uczestniczyć w rozwiązaniu.

Jest to w przeciwieństwie do - na przykład - błędu domeny , który można zastąpić cichym niepowodzeniem bez zmiany deklaratywnego znaczenia programu.

Ogólne informacje na temat obsługi błędów

Prolog zawiera wyjątki , które są częścią standardu Prolog ISO.

Wyjątek można rzucić za pomocą throw/1 i złapać za pomocą catch/3 .

Norma ISO określa wiele przypadków, w których błędy muszą lub mogą być zgłaszane. Standaryzowane wyjątki to wszystkie error(E,_) formularza error(E,_) , gdzie E oznacza błąd. Przykładami są instantiation_error , domain_error i type_error , co zobaczyć.

Ważnym predykatem związanym z wyjątkami jest setup_call_cleanup/3 , które widzą.

Sprzątanie po wyjątkach

Predykat setup_call_cleanup/3 , który jest obecnie rozważany pod kątem włączenia do standardu Prolog ISO i zapewniany przez rosnącą liczbę implementacji, pozwala nam zapewnić, że zasoby zostaną poprawnie zwolnione po zgłoszeniu wyjątku.

Typowe wywołanie to:

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

Zauważ, że wyjątek lub przerwanie może nawet wystąpić natychmiast po wywołaniu open/3 w tym przypadku. Z tego powodu faza Setup jest przeprowadzana atomowo . W systemach Prolog, które zapewniają tylko call_cleanup/2 , jest to o wiele trudniejsze do wyrażenia.

Błędy typu i domeny

Błąd typu występuje, jeśli argument nie jest oczekiwanego typu . Przykłady typów to:

  • integer
  • atom
  • list .

Jeśli predykat jest oczekiwanego typu, ale znajduje się poza oczekiwaną domeną , wówczas zgłaszany jest błąd domeny .

Na przykład błąd domeny jest dopuszczalny, jeśli oczekiwana jest liczba całkowita od 0 do 15, ale argumentem jest liczba całkowita 20.

Deklaracyjnie błąd typu lub domeny jest równoznaczny z cichym niepowodzeniem , ponieważ żadna instancja nie może uczynić predykatu, którego argument jest niepoprawnym typem lub domeną.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow