Buscar..


Errores de instanciación

Se genera un error de creación de instancias si un argumento no está suficientemente instanciado .

Críticamente, un error de instanciación no puede ser reemplazado por una falla silenciosa : fallar en tales casos significaría que no hay solución , mientras que un error de instanciación significa que una instancia del argumento puede participar en una solución.

Esto contrasta, por ejemplo , con un error de dominio , que puede ser reemplazado por una falla silenciosa sin cambiar el significado declarativo de un programa.

Puntos generales sobre el manejo de errores.

Prolog presenta excepciones , que son parte del estándar ISO Prolog.

Se puede lanzar una excepción con el throw/1 , y capturarse con catch/3 .

La norma ISO define muchos casos en los que se deben o se pueden lanzar errores. Las excepciones estandarizadas son todas de error(E,_) formulario error(E,_) , donde E indica el error. Los ejemplos son instantiation_error , domain_error y type_error , que veremos.

Un predicado importante en relación con las excepciones es setup_call_cleanup/3 , que vea.

Limpieza después de las excepciones.

El predicado setup_call_cleanup/3 , que actualmente está siendo considerado para su inclusión en el estándar ISO Prolog y proporcionado por un número cada vez mayor de implementaciones, nos permite asegurarnos de que los recursos se liberen correctamente después de lanzar una excepción.

Una invocación típica es:

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

Tenga en cuenta que una excepción o interrupción puede ocurrir incluso inmediatamente después open/3 llamar a open/3 en este caso. Por esta razón, la fase de Setup se realiza atómicamente . En los sistemas Prolog que solo proporcionan call_cleanup/2 , esto es mucho más difícil de expresar.

Errores de tipo y dominio

Se produce un error de tipo si un argumento no es del tipo esperado. Ejemplos de tipos son:

  • integer
  • atom
  • list

Si el predicado es del tipo esperado, pero fuera del dominio esperado, se genera un error de dominio .

Por ejemplo, un error de dominio es admisible si se espera un número entero entre 0 y 15, pero el argumento es el número entero 20.

Declarativamente, un error de tipo o dominio es equivalente a una falla silenciosa , ya que ninguna instanciación puede hacer que un predicado cuyo argumento sea del tipo incorrecto o de dominio tenga éxito.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow