Поиск…


Ошибки создания

Ошибка создания экземпляра создается, если аргумент недостаточно инстанцирован .

Критически, ошибка создания экземпляра не может быть заменена молчащим сбоем : провал в таких случаях означает, что нет решения , тогда как ошибка создания означает, что экземпляр аргумента может участвовать в решении.

Это контрастирует, например, с ошибкой домена , которая может быть заменена молчащим сбоем без изменения декларативного значения программы.

Общие положения об обработке ошибок

В функциях Prolog есть исключения , которые являются частью стандарта Prolog ISO.

Исключение можно выбросить с помощью throw/1 и поймать с catch/3 .

Стандарт ИСО определяет многие случаи, в которых ошибки должны быть или могут быть выброшены. Стандартизованные исключения - это все error(E,_) формы error(E,_) , где E указывает на ошибку. Примерами являются instantiation_error , domain_error и type_error , которые видят.

Важным предикатом в связи с исключениями является setup_call_cleanup/3 , которые видят.

Очистка после исключений

Предикат setup_call_cleanup/3 , который в настоящее время рассматривается для включения в стандарт Prolog ISO и обеспечиваемый растущим числом реализаций, позволяет нам гарантировать, что ресурсы будут правильно освобождены после того, как будет выбрано исключение.

Типичным вызовом является:

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

Обратите внимание, что исключение или прерывание могут возникать сразу же после open/3 в этом случае. По этой причине фаза Setup выполняется атомарно . В системах Prolog, которые предоставляют только call_cleanup/2 , это намного сложнее выразить.

Ошибки типа и домена

Ошибка типа возникает, если аргумент не относится к ожидаемому типу . Примеры типов:

  • integer
  • atom
  • list .

Если предикат имеет ожидаемый тип, но вне ожидаемого домена , то возникает ошибка домена .

Например, допустима ошибка домена, если ожидается целое число от 0 до 15, но аргументом является целое число 20.

Декларативно ошибка типа или домена эквивалентна молчащему сбою , поскольку никакое инстанцирование не может сделать предикат, аргумент которого имеет неправильный тип или домен.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow