Programación recursiva en Prolog

Documentos relacionados
Programación Declarativa Ejercicios de programación con listas

Programación lógica con listas

ESTRUCTURAS DE DATOS

Programación con Listas

Programas Generate & Test

Tema 13: Aplicaciones de programación funcional

Listas en Prolog. Capítulo. Listas como sujetos

Metodología de Programación I Tutorial Prolog 2/3

Taller de Programación Dinámica

Tema II El Lenguaje Lógico PROLOG

TEMA 4 NÚMEROS ENTEROS

Práctica N o 1 - Programación Funcional

CENTRO DE BACHILLERATO TECNOLOGICO INDUTRIAL Y DE SERVICIOS NO. 21. Profesor Enrique López Vásquez Algebra

Teoría de los Lenguajes de Programación Práctica curso Enunciado. Fernando López Ostenero y Ana García Serrano

PROGRAMACIÓN ORIENTADA A LA INTELIGENCIA ARTIFICIAL

Programación Declarativa UNIVERSIDAD DE MÁLAGA

Programación Declarativa

Programación Declarativa

Resumen de aritmética de Peano

Tipos algebraicos y abstractos. Algoritmos y Estructuras de Datos I. Tipos algebraicos

Programación lógica con árboles. Introducción. Contenido. Introducción. 1. Programación con árboles 2. Otras estructuras arbóreas

Tema 6: Representación lógica del conocimiento

IDENTIFICAR LOS ELEMENTOS DE UN VECTOR

Programación n en Prolog

EJERCICIOS RESUELTOS DE PROLOG

Práctica N o 4 - Programación Lógica

ANÁLISIS Y DISEÑO DE ALGORITMOS. PRACTICAS

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

Programación Declarativa Universidad de Málaga

Inteligencia Artificial II Prolog I

Práctica N o 5 - Programación Lógica

EJERCICIOS DE VERANO MATEMÁTICAS 3º ESO

MatemáticaDiscreta&Lógica 1

Inteligencia Artificial: Prolog

EXPRESIONES ALGEBRAICAS.

Especificación de Problemas

PROGRAMACIÓN ORIENTADA A LA INTELIGENCIA ARTIFICIAL

Programación Declarativa Haskell Informática Sistemas Curso Pepe Gallardo Universidad de Málaga. Tema 8. Listas

Tema 1: Introducción a la programación funcional

Práctica 2. TIPOS DE DATOS SIMPLES

Árboles generales. Un árbol es una estructura no lineal acíclica utilizada para organizar información de forma eficiente. La definición es recursiva:

Laboratorio 1 Ecuaciones Cuadráticas I. II.- Resolver las ecuaciones siguientes usando el MÉTODO COMPLETANDO CUADRADOS.

Criterios de evaluación. Tema 1. Matemáticas. 6º Primaria

Parte de Algoritmos de la asignatura de Programación Master de Bioinformática. Divide y vencerás

Colegio San Patricio A Incorporado a la Enseñanza Oficial Fundación Educativa San Patricio

Tema 6: Funciones recursivas

Teoría de los Lenguajes de Programación Práctica curso

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

001. Identifica, en un conjunto de números, los que son enteros.

Representación Gráfica (recta numérica)

Colegio Juan de la Cierva. PROGRAMACIÓN DIDÁCTICA Asignatura: Matemáticas Curso: 5º Etapa: Primaria Curso académico:

Informática Haskell Matemáticas Curso Pepe Gallardo Universidad de Málaga. Tema 8. Listas

Guía 1: Funciones, precedencia y tipado

Álgebra Enero Laboratorio #1 Ecuaciones Cuadráticas I. I.- Resolver las ecuaciones siguientes usando el método Factorización.

Expresiones algebraicas

Polinomios CLAVES PARA EMPEZAR VIDA COTIDIANA. a) 3x b) c) d) x 2 3. a) iii b) ii c) i. a) 7 (4 2) c) 9x (x 4) 9x 2 36x

Cálculo del valor acumulado de los elementos de una secuencia

Subrutinas. Subrutinas. Erwin Meza Vega

Álgebra vs Aritmética. ÁLGEBRA Álgebra Unidad 4. El lenguaje algebraico. TEMA 4: Polinomios. Expresiones algebraicas. Álgebra elemental.

ESCUELA PREPARATORIA OFICIAL NO.16 GUIA DE ESTUDIO PARA EL EXAMEN ORAL DE PENSAMIENTO NUMÉRICO Y ALGEBRAICO I EJERCICIOS DE NUMEROS NATURALES

Una clasificación de los tipos de datos existentes en los diferentes lenguajes de programación se presenta a continuación:

Estructuras de Datos y Listas en PROLOG. 1. Estructuras y árboles 2. Listas 3. Operaciones con Listas 4. Ejercicios 5. Prácticas

TEMA 10 FUNCIONES NOMBRE Y APELLIDOS... HOJA 52- FECHA...

Funciones: Pasos por Referencia Recursividad

ÁRBOLES CRISTIAN ALFREDO MUÑOZ ÁLVAREZ JUAN DAVID LONDOÑO CASTRO JUAN PABLO CHACÓN PEÑA EDUARDO GONZALES

Máquinas de estado finito y expresiones regulares

PRODUCTO NOTABLE. Producto Notable

Decrementa y vencerás

TEMA V. Espacios vectoriales

ESCUELAS TECNICAS ORT SEDE BELGRANO Nombre y apellido: Curso: 5GC Prof: Eric Lescano Guía 1: Operaciones con Polinomios y factorización

1. Números naturales y sistema de numeración decimal

OBJETIVOS CONTENIDOS PROCEDIMIENTOS

RECURSIVIDAD. Prof. Ing. M.Sc. Fulbia Torres

MATEMÁTICAS 2º E.S.O.

1. ESQUEMA - RESUMEN Página EJERCICIOS DE INICIACIÓN Página EJERCICIOS DE DESARROLLO Página EJERCICIOS DE AMPLIACIÓN Página 21

LENGUAJES DE PROGRAMACIÓN. Pregunta 1 (3 puntos)

Tipos de datos algebraicos

Objetivos formativos de Álgebra

6 Formatos de modelos 3D

UNIDAD 1. Números naturales y enteros 1º ESO. Contenidos, objetivos y criterios de evaluación DEPARTAMENTO DE MATEMÁTICAS

Transcripción:

Programación recursiva en Prolog Curso 2002/03, Fecha:14/12/2002 Enunciado 1 (naturales) El siguiente predicado define la suma de números naturales representados mediante la constante 0 y la función siguiente s suma (0,X,X). suma ( s (X),Y, s (Z)): suma (X,Y, Z ). Una posible pregunta para calcular el valor de la suma de 3 y 2 sería: suma(s(s(0)),s(s(s (0))), V) Calcular el valor V tal que el resultado de sumar 2 y V sea 5 Calcular los valores V y W cuya suma sea 5 Definir el predicado producto Definir el predicado potencia (Opcional). Definir otros predicados aritméticos (por ejemplo, máximo común divisor, menor, etc.) Enunciado 2 (pertenece) El siguiente predicado chequea si un elemento pertenece a una lista p e r t e n e c e (X, [ X ] ). p e r t e n e c e (X, [ Ys ]): p e r t e n e c e (X, Ys ). Preguntar si el elemento 2 pertenece a la lista [1,2,3,4]. Preguntar si existe un elemento X que pertenezca a la lista [1,2,3,4] Preguntar si existe una lista L que incluya al elemento 2 Enunciado 3 (concatena) Definir un predicado que permita concatenar 2 listas Utilizando dicho predicado, calcular parejas de listas que al concatenarse resulten en [1,2,3,4] 1

Definir el predicado prefijo que se cumple si una lista es un prefijo de otra Definir el predicado sufijo que se cumple si una lista es un sufijo de otra Definir el predicado sublista que se cumple si una lista está incluida en otra Enunciado 4 (inserta) Definir un predicado inserta (X,Xs,Ys) que se cumple si la lista Ys es el resultado de insertar el elemento X en la lista Xs? i n s e r t a ( 1, [ 2, 3 ],V). V = [ 1, 2, 3 ] ; V = [ 2, 1, 3 ] ; V = [ 2, 3, 1 ] ; Enunciado 5 (permutaciones) Definir un predicado permutaciones(xs,ys) que se cumple si la lista Ys es una permutación de la lista Xs? permutaciones ( [ 1, 2, 3 ],V). V = [ 1, 2, 3 ] ; V = [ 2, 1, 3 ] ; V = [ 2, 3, 1 ] ; V = [ 1, 3, 2 ] ; V = [ 3, 1, 2 ] ; V = [ 3, 2, 1 ] ; Enunciado 6 (ordenada) Definir un predicado ordenada(xs) que se cumple si la lista Xs contiene todos los elementos ordenados de menor a mayor.? ordenada ( [ 3, 1, 2 ] ).? ordenada ( [ 1, 3, 5 ] ). Yes Enunciado 7 (ordenasalvaje) Definir un predicado ordena(xs,ys) que se cumple si la lista Ys contiene los elementos ordenados de Xs.? ordena ( [ 3, 1, 2 ],V). V = [ 1, 2, 3 ] 2

Aunque existen diversos algoritmos de ordenación, en este ejercicio puede utilizarse uno de los algoritmos menos eficientes que consiste simplemente en generar permutaciones de la lista a ordenar y chequear que están ordenadas. Enunciado 8 (nreinas) El predicado segura se cumple cuando las posiciones de n reinas en un tablero de ajedrez no se amenazan entre sí. En http://www.di.uniovi.es/ labra/plf/prac/worlds/nreinas2.wrl puede observarse una representación en realidad virtual de una de las posibles soluciones. La representación del tablero se realiza mediante una lista de las alturas de cada reina. Una posible solución sería: [4,2,7,3,6,8,5,1] que indica que las reinas aparecen en las coordenadas (1,4),(2,2),(3,7),(4,3),... s e g ura ( [ ] ). s e g ura ( [R Rs ] ) : s e g u r a ( Rs ), noataque (R, Rs, 1 ). noataque (, [ ], ). noataque (Y, [ Y1 Ys ],D): Y1 Y =\= D, Y Y1 =\= D, D1 i s D + 1, noataque (Y, Ys, D1 ). Construir un predicado Prolog que resuelva el problema generando todas las posibles soluciones al problema Enunciado 9 (vernreinas(opcional)) Almacenar las soluciones al problema de las nreinas en un fichero VRML Para facilitar este problema se proporciona a continuación un predicado que genera un tablero de ajedrez en realidad virtual y coloca una pieza en una posición determinada main: open ( f. wrl, w r i t e, S ), c a b e c e r a ( S ), viewpoint ( S ), t a b l e r o ( S ), ponpieza (S, 3, 4 ), c l o s e ( S ). ponpieza (S,X, Z): Xr i s 1 0 X, Zr i s 1 0 Z, p u t C y l i n d e r (S, Xr, 3, Zr, rgb ( 0, 0, 1 ), 3, 6 ). t a b l e r o ( S): f i l a s (S, 1, 8 ). 3

f i l a s (S,M,M): c o l s (S, 1, 8,M). f i l a s (S,M,N): M < N, c o l s (S, 1, 8,M), M1 i s M + 1, f i l a s (S,M1,N). c o l s (S,M,M, Z): c e l l (S,M, Z ). c o l s (S,X,M, Z): X < M, c e l l (S,X, Z ), X1 i s X + 1, c o l s (S, X1,M, Z ). c e l l (S,X, Z): Xr i s 1 0 X, Zr i s 1 0 Z, g e t C o l o r (C,X, Z ), putbox (S, Xr, 0, Zr,C, 1 0, 1, 1 0 ). g e t C o l o r (C,X,Y): 0 i s (X+Y) mod 2 C = rgb ( 1, 0, 0 ) ; C = rgb ( 0, 1, 0 ). c a b e c e r a ( S): w r i t e (S, #VRML V2. 0 u t f 8 \n\n ). viewpoint ( S): w r i t e (S, Viewpoint { d e s c r i p t i o n Punto \ n ), w r i t e (S, o r i e n t a t i o n 0.6 0.6 0.6 0.6\ n ), w r i t e (S, p o s i t i o n 1 0 4 0 1 6 0 } \ n ). putbox (S,X,Y, Z,C, SX, SY, SZ): t r a n s l a t e (S,X,Y, Z ), c o l o r (S,C), box (S, SX, SY, SZ ), endcolor ( S ), e n d T r a n s l a t e ( S ). p u t C y l i n d e r (S,X,Y, Z,C,R,H): t r a n s l a t e (S,X,Y, Z ), c o l o r (S,C), c y l i n d e r (S,R,H), endcolor ( S ), e n d T r a n s l a t e ( S ). t r a n s l a t e (S,X,Y, Z): 4

w r i t e (S, Transform { t r a n s l a t i o n ), w r i t e 3 (S,X,Y, Z ), n l ( S ), w r i t e (S, c h i l d r e n [ ). e n d T r a n s l a t e ( S): w r i t e (S, ] } \ n ). c o l o r (S, rgb (R,G,B)): w r i t e (S, Shape { appearance Appearance ), w r i t e (S, { m a t e r i a l M a t e r i a l { d i f f u s e C o l o r ), w r i t e 3 (S,R,G,B), w r i t e (S, } } ). endcolor ( S): box (S,X,Y, Z): w r i t e (S, geometry Box { s i z e ), w r i t e 3 (S,X,Y, Z ), c y l i n d e r (S,R,H): w r i t e (S, geometry C y l i n d e r { r a d i u s ), w r i t e (S,R), w r i t e (S, h e i g h t ), w r i t e (S,H), w r i t e 3 (S,X,Y, Z): format (S, 2 f 2 f 2 f, [ X,Y, Z ] ). 5