수색…


인스턴스화 오류

인수가 충분히 인스턴스화 되어 있지 않은 경우, 인스턴스화 에러가 throw됩니다.

비효율적으로, 인스턴스화 오류 자동 실패 로 대체 될 수 없습니다 . 이러한 경우 실패는 솔루션없음을 의미하지만 인스턴스화 오류는 인수의 인스턴스 가 솔루션에 참여할 수 있음을 의미합니다.

이는 프로그램의 선언적 의미를 변경하지 않고 자동 오류로 대체 될 수있는 도메인 오류 와는 대조적입니다.

오류 처리에 대한 일반적인 사항

Prolog에는 Prolog ISO 표준의 일부인 예외 가 있습니다.

예외는 throw/1throw/1 질 수 있고 catch/3 잡힐 수있다.

ISO 표준은 오류가 던져 지거나 던져 질 수있는 많은 경우를 정의합니다. 표준화 된 예외는 모두 양식 error(E,_) . 여기서 E 는 오류를 나타냅니다. 예를 들어 instantiation_error , domain_errortype_error 가 있습니다.

예외와 관련하여 중요한 술어는 setup_call_cleanup/3 입니다.

예외 후 정리

현재 Prolog ISO 표준에 포함되고 증가하는 구현에 의해 제공되는 것으로 간주되는 setup_call_cleanup/3 술어는 예외가 발생 된 후에 자원이 올바르게 해제되도록합니다.

일반적인 호출은 다음과 같습니다.

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

이 경우에는 open/3 이 호출 된 직후에 예외 나 인터럽트가 발생할 수 있습니다. 이러한 이유로 Setup 단계는 원자 적으로 수행됩니다. call_cleanup/2 만 제공하는 Prolog 시스템에서는 표현하기가 훨씬 어렵습니다.

유형 및 도메인 오류

인수가 예상되는 유형 이 아닌 경우 유형 오류 가 발생합니다. 유형의 예는 다음과 같습니다.

  • integer
  • atom
  • list .

술어가 예상되는 유형이지만 예상 된 도메인 외부에 있으면 도메인 오류 가 발생합니다.

예를 들어 도메인 오류는 0에서 15 사이의 정수가 필요하지만 인수는 정수 20 인 경우 허용됩니다.

선언적으로 유형 또는 도메인 오류는 자동 실패 와 같습니다. 인스턴스화가 잘못된 유형 또는 도메인의 인수가 성공한 술어를 작성할 수 없기 때.입니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow