Prolog Language
Manejo de errores y excepciones.
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.