el proceso de backtracking.

Documentos relacionados
Listas. Listas. Listas. Listas y Corte en Prolog. Temas Avanzados en Ingeniería Informática I (Lógica) David Camacho Fernández.

6. Operadores en PROLOG

TRABAJO DE MATEMÁTICAS. PENDIENTES DE 3º ESO. (2ª parte)

TALLER DE MATEMÁTICAS NOTAS. Toda expresión algebraica del tipo. a n x n + a n 1 x n a 1 x + a 0. es un polinomio de grado n, si a n 0.

M.C.D. - M.C.M. de polinomios

ANILLOS DE POLINOMIOS. Sea A un anillo conmutativo. El conjunto A[X] de polinomios sobre A esta formado por los elementos

Propiedades de imágenes y preimágenes

Axiomas del Cálculo de Predicados

Métodos para Probar la Invalidez de un Argumento

Notas del cursos. Basadas en los prontuarios de MATE 3001 y MATE 3023

Prolog: Listas (y II) MRC

MATEMÁTICA - TERCERO - REVISIÓN INTEGRADORA. 1) Determinar k y h para que las rectas kx+2y-h=0, 4x+ky-2=0, se corten en un punto.

TEMA 5. FACTORIZACIÓN DE POLINOMIOS.

SOLUCIONES A LOS EJERCICIOS DE LA UNIDAD. a) Grado 2 b) Grado 3 c) Grado 2 d)grado 1 e) Grado 1 f) Grado 3 g) Grado 0 h) Grado 2 i) Grado 0

Inteligencia Artificial II Prolog I

RESUMEN DE ALGORITMOS PROBABILÍSTICOS

Tema 4. Control en PROLOG

3.2. Control con cortes Operador corte Cortes verdes Cortes rojos

Tema 3: Expresiones algebraicas

División algebraica I (Método de Horner)

Polinomios en R[x] - Función Polinómica

Clase 4 Funciones polinomiales y racionales

Algoritmo de unificación de Robinson

SUMA DE MONOMIOS Y POLINOMIOS

Manos a la obra: Recursión, división y listas

Semana02[1/33] Números Reales. March 9, Números Reales

n! = 1 2 n 0! = 1 (n+1)! = (n + 1) n!

Polinomios. Polinomios.

TALLER DE MATEMÁTICAS 1 ECUACIONES POLINÓMICAS

METODOS DE INTEGRACION IV FRACCIONES PARCIALES

RECONOCER EL GRADO, EL TÉRMINO Y LOS COEFICIENTES DE UN POLINOMIO

I. Operaciones con matrices usando Mathematica

UNIDAD 4: FUNCIONES POLINOMIALES Y RACIONALES

Ejercicios del Tema 2: Estructuras algebraicas básicas

Manipulando celdas. Te recomendamos iniciar Excel 2007 ahora para ir probando todo lo que te explicamos.

PÁGINA 84 AB = ( 2, 7) (1, 1) = ( 3, 6) 8 AB = ( 3) = = 45 = CD = (3, 6) (6, 0) = ( 3, 6) 8 = 45 = 3 5

Semántica Operacional para la Programación en Lógica Lógica para Ciencias de la Computación

POLINOMIOS Y DIVISIÓN DE POLINOMIOS MATEMÁTICAS 3º ESO

En todas las representaciones el valor de la constante a nos indica para donde abre la parábola: abre hacia arriba (a > 0) o hacia abajo (a < 0):

Subspacios Vectoriales

Carlos A. Rivera-Morales. Precálculo 2

Polinomios. 1.- Funciones cuadráticas

Para responder al problema planteado utilizar el programa GeoGebra siguiendo estos pasos: Abrir el programa graficador.

520142: ALGEBRA y ALGEBRA LINEAL

SOLUCIONES A LAS ACTIVIDADES DE CADA EPÍGRAFE

Lógica de Predicados 1

Antes de iniciar el tema se deben de tener los siguientes conocimientos básicos:

La suma se realiza miembro a miembro. La suma de polinomios goza de las mismas propiedades que la suma de números. Ejemplo:

ESCUELA POLITÉCNICA SUPERIOR PRÁCTICA 2: EXPRESIONES, PRINTF Y SCANF

Inteligencia en Redes de Comunicaciones. Prolog. Julio Villena Román.

Lógica de Predicados 1!

Programación Exploratoria - Predicados Predefinidos en Prolog -

(x ) (x ) = x 2 + px + q. ( + ) = p = q: El método de completamiento de cuadrado aplicado al polinomio. P (x) = ax 2 + bx + c. P (x) = a x + b 2.

EL GRADO Y LOS ELEMENTOS QUE FORMAN UN POLINOMIO

FUNCIÓN. La Respuesta correcta es D

VECTORES vector Vector posición par ordenado A(a, b) representa geométricamente segmento de recta dirigido componentes del vector

Q(x,t) = -2x 2 t 3 - xt x 5-3x 3 + 4x 2 +2x- 7 22/03/2016. División de polinomios. P(x) = -x 4 + 3x 2-5 R(x) = 5x 4-2x 3 + 3x

POLINOMIOS INTERPOLANTES O DE INTERPOLACIÓN

FUNCIÓN CUADRÁTICA. 3ro. Medio Plan Común. 1. Dadas las siguientes ecuaciones, identifica los coeficientes numéricos de la función. = c.

Lógica de predicados

1. Coordenadas en el plano. (Sistema de coordenadas, ejes de coordenadas, abcisas, ordenadas, cuadrantes)

Cálculo de predicados. Lógica de predicados. Cálculo de predicados. Cálculo de predicados 08/06/2011

Tema 1. Introducción al PROLOG. 1. Qué es el PROLOG? 2. Los elementos de PROLOG 3. Un programa de ejemplo 4. Ejercicios propuestos

Espacios de una Matriz

March 25, 2010 CAPÍTULO 2: LÍMITES Y CONTINUIDAD DE FUNCIONES EN EL ESPACIO EUCLÍDEO

Operador de corte (cut): Motivaciones. Cut (!): Definición formal. Cut (!): Implicancias de la Definición. Aplicaciones. Cut (!): Ejemplo. b,!

Inteligencia en Redes de Comunicaciones - 04a Prolog

5.3 Tipos de Datos en Prolog

Capítulo 4: Polinomios

TRABAJO PRÁCTICO Nº 4: POLINOMIOS

1. [2014] [EXT] Sean las funciones f(x) = eax +b

INFORMÁTICA MATLAB GUÍA 5 Simulink

INTERVALOS Y SEMIRRECTAS.

5.3 Tipos de Datos en Prolog

Complejidad de algoritmos recursivos

Estructura de datos y de la información Boletín de problemas - Tema 9

Universidad de Costa Rica. Instituto Tecnológico de Costa Rica II EXAMEN PARCIAL 2015 PRECÁLCULO. -Décimo Año- Nombre: código: Colegio: Fórmula 1

Tema 3. Aplicaciones de Tipo Consola

ESPACIOS VECTORIALES

U.E. Colegio Los Arcos Matemáticas Segundo año Guía #10 Factor común en un polinomio

ECUACIONES DIFERENCIALES DE PRIMER ORDEN

1. Espacios Vectoriales Reales.

Tema 6: Programación Lógica: semántica declarativa. Lenguajes y Paradigmas de Programación

Conjuntos Los conjuntos se emplean en muchas áreas de las matemáticas, de modo que es importante una comprensión de los conjuntos y de su notación.

NOCIONES PRELIMINARES (*) 1

FUNCIONES I UNIVERSIDAD DE COSTA RICA ESCUELA DE MATEMÁTICA DPTO. DE MATEMÁTICA APLICADA MA 0001 PRECÁLCULO

INFORMATICA TECNICATURA DE NIVEL SUPERIOR ALGUNOS EJERCICIOS DE SELECCIÓN E ITERACION

Tema 3. Patrones y Definiciones de Funciones

MÉTODOS DE INTEGRACION

EXPRESIONES ALGEBRAICAS

Prolog. Sintaxis Informal. Sintaxis Informal. Hechos: ejemplos. Inteligencia Artificial 2º cuatrimestre de Hechos. Hechos. Reglas.

Tema 6 La recta Índice

Transcripción:

1 El proceso de Backtracking 1.1 Backtracking En esta práctica se examina en detalle cómo Prolog busca todas las soluciones a un objetivo. Prolog responde a una pregunta hecha por el programador. Esta pregunta contiene una conjunción de objetivos que se deben satisfacer. Un hecho puede hacer que un objetivo se cumpla inmediatamente, mientras que una regla sólo puede reducir la tarea a la de satisfacer una conjunción de subobjetivos. Si no se puede satisfacer un objetivo, se iniciará un proceso de backtracking. Este proceso consiste en intentar satisfacer los objetivos buscando una forma alternativa de hacerlo. En nuestro prolog, se puede seguir el proceso de backtracking paso a paso. Basta con escribir la palabra trace al inicio del programa y pulsar la tecla F10 para realizar el siguiente paso. La traza hace que el entorno pare el programa después de cada paso y diga en la ventana Trace lo que ha hecho, dónde está y cuáles son los valores de las variables. En esta ventana aparece uno de los siguientes mensajes: CALL: Cuando intenta satisfacer un predicado. RETURN: Cuando un predicado se satisface. FAIL: Cuando un predicado no se satisface. REDO: Cuando se inicia el proceso de backtracking. 1.2 El predicado corte y el predicado fail El corte es un predicado predefinido y sin argumentos. Se escribe con el signo de exclamación! y se utiliza para impedir que se inicie el proceso de backtracking. Como objetivo se cumple inmediatamente pero no puede satisfacerse de nuevo. Su utilización puede ser muy importante para que el programa funcione más rápido y no malgaste memoria y tiempo en intentar satisfacer objetivos que podemos decir de antemano que nunca contribuirán a una solución. El predicado fail es también un predicado predefinido, sin argumentos y siempre fracasa como objetivo, lo que provoca que se desencadene inmediatamente el proceso de backtracking.

Los predicados corte y fail se combinan para indicar situaciones erróneas, es decir, para decir que se ha fallado y que no busque más soluciones. 1.3 Ejercicios propuestos 1.3.1 Sobre el predicado corte 1. Dado el programa: hola(3):-!. hola(6). hola(x):- Y=X-1, hola(y), write(y). Contesta a los siguientes objetivos sin ejecutar el programa: (a) hola(4) (b) hola(9) (c) hola(x) Comprueba si tus respuestas son correctas realizando una traza del programa. 2. Considera el siguiente programa: a(x):- b(x). a(x):- f(x). b(x):- g(x),!, v(x). b(x):- X=4, v(x). g(1). g(2). g(3). v( ). f(5). Ejecuta con una traza a(x), y analiza si el resultado obtenido está en contradicción con el que sale al ejecutar los objetivos a(2), a(3) y a(4). Cuál sería la respuesta si quitásemos el corte que aparece en la tercera línea? 3. Se considera el siguiente programa: p(x):- q(x), r(x). q(a). r(a). q(b). r(x):-s(x). s(b).

Si se ejecuta el objetivo p(x) se obtiene como respuesta X=a y X=b. Modificar el programa insertando el predicado corte en el lugar adecuado para que el sistema conteste sólo X=a. 1.3.2 La sucesión de Fibbonacci La sucesión de Fibbonacci se define como: f(0) = f(1) = 1, f(n) = f(n 1) + f(n 2). Escribe un predicado F(N,M) en Prolog de forma que M = f(n). Este predicado debe de funcionar para los siguientes casos: 1. Dado un número natural N, que sea capaz de generar M. 2. N y M vienen instanciados y debe constestar si/no. 3. Ambas variables vienen sin instanciar y debe de genrar todos los pares N y M. 1.3.3 La función de D Ackerman Construye un predicado que defina la función de D Ackerman que viene dada por: A(0, n) = n + 1, n 0 A(m, 0) = A(m 1, 1), m > 0 A(m, n) = A(m 1, A(m, n 1)) m, n > 0 no existe solución, m < 0, n < 0. 1.3.4 El predicado intersección Se considera el siguiente programa: pertenece(x, [X ]). pertenece(x, [ Y ]):- pertenece(x,y). inter( [ ], [ ], ). inter( [X Y], [X L1], L2):- pertenece(x, L2), inter(y, L1, L2). inter(y, [ L1 ], L2) :- inter(y, L1, L2). Se desea que el predicado inter funcione de la manera siguiente: Goal: inter(x,[1,2,3],[2,3,4,5]) X=[2,3]

Goal: inter([2,3],x,[2,3,4,5]) X=[2,3] 1. Usa la traza para saber por qué el resultado obtenido por el programa no es el deseado. 2. Añade un corte en el lugar adecuado para solventar el problema.

2 Listas y recursión 2.1 Listas La lista es una manera fácil de trabajar en situaciones donde es difícil o imposible predecir el número de datos a ser guardados o manipulados. En prolog, una lista es un objeto que contiene un número arbitrario de otros objetos, llamados elementos de la lista. Los elementos de una lista pueden ser de cualquier tipo de dato, incluso pueden ser a su vez listas. He aquí un ejemplo de una lista de enteros: [1, 2, 3, 4, 5] La lista que no contiene ningún elemento es la lista vacía: [ ]. Las listas se manipulan dividiéndolas en una cabeza y una cola. Una lista, es realmente un objeto compuesto recursivo, que consiste en la cabeza que es el primer elemento y en la cola que es a su vez una lista que contiene todos los elementos excepto el primero. Como una variable que no esté instanciada se puede unificar con cualquier objeto, también lo puede hacer con una lista. Debido a que una operación común con las listas es separarla en su cabeza y su cola, existe una notación especial en Prolog para representar la lista con cabeza X y cola Y. Esto se escribe [X Y ]. Una expresión con esta forma instanciará X a la cabeza de una lista e Y a la cola de la lista. 2.2 Predicados con listas La forma de trabajar con listas consiste en tomar la cabeza de la lista y luego hacer la misma operación con la cola de la lista. Esta forma de trabajar utiliza dos reglas, una recursiva y un criterio de terminación. Existen tres criterios de terminación muy importantes: 1. Cuando la lista es vacía. El esquema general de todos los predicados que tienen como criterio de terminación la lista vacía es: predicado([ ]) : procesar([ ]). predicado([cabeza Cola]) : procesar(cabeza), predicado(cola). 2. Cuando un elemento en concreto es encontrado. El esquema general es:

predicado([elemento, [Elemento ]) : procesar(elemento). predicado(elemento, [Cabeza Cola]) : procesar(cabeza), predicado(elemento, Cola). 3. Cuando una posición en conreto es encontrada. El esquema general es: predicado([1, Elemento, [Elemento ]) : procesar(elemento). predicado(p, Elemento, [ Cola]) : P 1 = P 1, predicado(p 1, Elemento, Cola). 2.3 Ejercicios propuestos 2.3.1 Predicados elementales sobre listas Escribe los siguientes predicados: 1. primero(x,lista) X es el primer elemento de la lista. 2. ultimo(x,lista) X es el último elemento de la lista. 3. elemento par(x,lista) Es cierto si X ocupa una posición par en la lista. 4. cuantas(x,lista,n) X aparece N veces en la lista. 5. maximo(x,lista) X es el máximo de la lista. 6. minimo(x,lista) X es el minimo de la lista. 7. sumadelosdemas(lista) Dada una lista de enteros L, se satisface si existe algún elemento en L que es igual a la suma de los demás elementos de L y falla en caso contrario. 8. pescalar(l1,l2,p) P es el producto escalar de los vectores L1 y L2. Los dos vectores vienen dados por las dos listas de enteros L1 y L2. El predicado debe fallar si los dos vectores tienen una longitud distinta.