Prolog modelo de cajas
AkiraTetsuoApuntes25 de Abril de 2022
686 Palabras (3 Páginas)338 Visitas
[pic 1] UPIICSA Unidad Profesional Interdisciplinaria de Ciencias Sociales y Administrativas
__________________________________________________ FUNDAMENTOS DE INTELIGENCIA ARTIFICIAL
P R O L O G
[pic 2]
CONTROL DE FLUJO (Modelo de Cajas en Prolog)
Los predicados que el lenguaje tiene para la localización de errores son proporcionados para que el usuario observe el flujo del programa y localice cualquier error que pudiera presentarse. Por lo que es de suma importancia saber de su existencia y conocer cómo es que funciona por lo que se debe conocer el modelo de cajas ya que se utiliza para controlar el flujo de un programa en Prolog.
Los recursos del lenguaje para localizar errores (debugging)(trace)
Para explicar el modelo de cajas, primero debe suponerse que cada procedimiento está contenido en una caja imaginaria, a continuación, se muestra un ejemplo para los procedimientos manzana y concatenar:
manzana (X) :- objeto (X, redondo), color(X, verde). | conc(M, [ ], M). conc(M, [M|T], D) :- conc ([H|M], T, |
D).
Solamente es posible entrar o salir de la caja bajo ciertas condiciones, desearemos entrar cuando se intenten satisfacer metas que impliquen a las cláusulas dentro de la caja. Esto sucede al llamar o invocar el procedimiento, esto se hará mediante la etiqueta CALL, a continuación, se muestra el procedimiento conc con la etiqueta CALL.
conc(M, [ ], M). conc(M, [M|T], D) :- conc ([H|M], T, D).
|
CALL →
Este tipo de acceso se llevará a cabo cuando se intente una llamada para satisfacer una parte de la regla o como una petición directa desde la terminal del usuario.
Por ejemplo:
?-conc([a,b,c], [d,e,f], Y).
Una vez adentro de la caja, tenemos que intentar salir tratando de satisfacer el procedimiento, en este intento se puede tener éxito o fracaso; en caso de que se haya logrado el procedimiento llamado, se pasa por el puerto EXIT de la caja; y en caso de que se falle el intento por satisfacer el procedimiento, se pasa por el puerto FAIL de la caja como se muestra a continuación:
[pic 3]
Ahora debe cubrirse la posibilidad de que el Prolog haya satisfecho previamente el procedimiento, pero se vea forzado a reconsiderarlo por el fracaso de una meta subsecuente. Esta opción se tiene con la inclusión en el modelo del puerto REDO, como se muestra enseguida.
[pic 4]
Para que exista compatibilidad con el recurso de localización de errores del DEC-10, también debe contarse un número de invocación y un número que represente la profundidad de la invocación. El número de invocación aparece entre paréntesis en los mensajes para la localización de errores y es un número asignado a una caja al ser ingresado por el puente CALL. A la primera caja a la que se ingrese se le asignara el número de invocación 1, a la segunda 2, etc. Obsérvese que estas cajas pueden ser la misma caja, llamada como parte de un procedimiento recurrente. El número de profundidad de la invocación puede pensarse como el número que indica la cantidad de reglas que han de satisfacerse para probar la petición inicial del nivel tope del sistema Prolog. Esto es, proporciona el número de ancestros de esa meta en particular.
...