Programación Declarativa UNIVERSIDAD DE MÁLAGA

Tamaño: px
Comenzar la demostración a partir de la página:

Download "Programación Declarativa UNIVERSIDAD DE MÁLAGA"

Transcripción

1 Programación Declarativa UNIVERSIDAD DE MÁLAGA (3 o de Ingeniería Técnica en Informática) E.T.S.I. INFORMÁTICA 17 de Febrero de 2005 Alumno: Grupo: Prolog Ejercicio 1 (a)(2 pts.) Realiza el árbol de búsqueda para el objetivo p([a,b,c,b,a],x) y el programa Prolog p([x],x). p([x Xs],Y) :- concatena(as,[x],xs), p(as,y). concatena([],ys,ys). concatena([x Xs],Ys,[X Zs]):- concatena(xs,ys,zs). 1 p([x], X). 2 p([x Xs], Y):- concatena(as, [X], Xs), p(as, Y). 3 concatena([], Ys, Ys). 4 concatena([x Xs], Ys, [X Zs]):- concatena(xs, Ys, Zs). 1) p([a, b, c, b, a], X) 2 - {X1/a, Xs1/[b, c, b, a], Y1/X} 2) concatena(as1, [a], [b, c, b, a]), p(as1, X) 4 - {As1/[b Xs2], Ys2/[a], X2/b, Zs2/[c, b, a]} 3) concatena(xs2, [a], [c, b, a]), p([b Xs2], X) 4 - {Xs2/[c Xs3], Ys3/[a], X3/c, Zs3/[b, a]} 4) concatena(xs3, [a], [b, a]), p([b, c Xs3], X) 4 - {Xs3/[b Xs4], Ys4/[a], X4/b, Zs4/[a]} 5) concatena(xs4, [a], [a]), p([b, c, b Xs4], X) 3 - {Xs4/[], Ys5/[a]} 4 - {Xs4/[a Xs5], Ys5/[a], X5/a, Zs5/[]} 6) p([b, c, b], X) 2 - {X6/b, Xs6/[c, b], Y6/X} 7) concatena(as6, [b], [c, b]), p(as6, X) 4 - {As6/[c Xs7], Ys7/[b], X7/c, Zs7/[b]} 13) concatena(xs5, [a], []), p([b, c, b, a Xs5], X) fallo 10. Øxito {X/c} 8) concatena(xs7, [b], [b]), p([c Xs7], X) 4 - {Xs7/[b Xs8], Ys8/[b], X8/b, Zs8/[]} 3 - {Xs7/[], Ys8/[b]} 9) p([c], X) 12) concatena(xs8, [b], []), p([c, b Xs8], X) 1 - {X9/c, X/c} fallo 2 - {X9/c, Xs9/[], Y9/X} 11) concatena(as9, [c], []), p(as9, X) fallo

2 (b)(1 pto.) Completa la tabla de comportamiento del predicado p anterior. (+, +) Test Comprueba que la lista es un palíndromo con un número impar de elementos, y que el segundo argumento es el elemento central. (+, ) Generador único Si la lista es un palíndromo con un número impar de elementos, genera en el segundo elemento el central de la lista. (, +) Generador no acotado Genera todos los posibles palíndromos con elemento central el segundo argumento. (, +) Generador no acotado Genera todos los posibles palíndromos con elemento central el segundo argumento. Ejercicio 2 (a)(1,25 pts.) Define el predicado gennat/1 que genera los números naturales:?- gennat(n). N = 0; N = 1; N = 2;... gennat(0). gennat(n) :- gennat(n1), N is N1+1. (b)(1,25 pts.) Define el predicado genent/1 que genera los números enteros (naturales con signo):?- genent(n). N = 0; N = 1; N = -1; N = 2;... signo(1). signo(-1). genent(0). genent(n) :- gennat(n1), signo(s), N is S*(N1+1). Ejercicio 3 (1,5 pts.) Define el predicado posiciones(asxsbs,xs,n) tal que devuelva por revaluación en N las posiciones en las que aparece la sublista Xs en la lista AsXsBs.?- posiciones([a,b,a,b,a,b,c,a,b,a],[a,b,a],n). N = 0; N = 2; N = 7;

3 posiciones(asxsbs,xs,n) :- concatena(asxs,_,asxsbs), concatena(as,xs,asxs), longitud(as,n). Ejercicio 4 (a)(1,5 pts.) Define el predicado cuenta(xsys,x,ys,n) tal que dadas la lista XsYs y un término X, devuelva en N el número de X que aparecen al principio de XsYs, y en Ys la lista que resulta de eliminar todas las X por las que empieza XsYs?- cuenta([5,5,5,4,4,1,6],5,ys,n). Ys = [4,4,1,6], N = 3 ;?- cuenta([5,5,5,4,4,1,6],1,ys,n). Ys = [5,5,5,4,4,1,6], N = 0 ; cuenta([],_,0,[]). cuenta([y Ys],X,0,[Y Ys]) :- Y \= X. cuenta([x XsYs],X,N,Ys) :- cuenta(xsys,x,t,ys), N is T+1. (b)(1,5 pts.) Define el predicado nombra(xs,ys) que dada una lista de enteros positivos Xs, devuelve una lista Ys que nombra la lista Xs, mencionando cuantas veces consecutivas aparece cada elemento de Xs?- nombra([1,1,1,3,3,7,4,4,3],ys). Ys = [3,1,2,3,1,7,2,4,1,3] ; nombra([],[]). nombra([x XsYs],[N,X Zs]) :- cuenta([x XsYs],X,N,Ys), nombra(ys,zs).

4

5 Programación Declarativa UNIVERSIDAD DE MÁLAGA (3 o de Ingeniería Técnica en Informática) E.T.S.I. INFORMÁTICA 17 de Febrero de 2005 Alumno: Grupo: Haskell Ejercicio 1 (a)(0,5 pts.) Cuál es el tipo polimórfico de la función h? h f g (x,y) = (f x, g y) h :: (a -> b) -> (c -> d) -> (a,c) -> (b,d) (b)(0,5 pts.) Cuál es el tipo polimórfico de la función h? h f g (x,y) = (g (f x), f (g y)) h :: (a -> b) -> (b -> a) -> (a,b) -> (a,b) (c)(0,5 pts.) Cuál es el tipo polimórfico de la función f? f g p h = map g. filter p. map h f :: (a -> b) -> (a -> Bool) -> (c -> a) -> [c] -> [b] (d)(0,75 pts.) Define la función f del apartado anterior usando una lista por comprensión f g p h = \xs -> [ g x x <- xs, let x = h x, p x ] (e)(0,75 pts.) Define la función f del apartado anterior usando foldr f g p h = foldr m [] where m x s p x = g x s otherwise = s where x = h x

6 Ejercicio 2 (a)(1 pto.) Completa la definición de la función span que se utiliza para dividir una lista en dos de manera que la primera contiene todos los elementos consecutivos de la lista que verifican un predicado dado y la segunda el resto. Por ejemplo: span (<6) [4,3,5,2,7,3,2,5,8,9] ==> ([4,3,5,2],[7,3,2,5,8,9]) span :: (a -> Bool) -> [a] -> ([a],[a]) span p [] = ([],[]) span p (x:xs) p x = (x:ys, zs) otherwise = ([],x:xs) where (ys,zs) = span p xs (a)(1,5 pts.) Un esquema simple de comprensión para cadenas de texto que contienen series de caracteres repetidos consiste en reemplazar cada una de las series por una única copia del carácter repetido y un dígito que indique el número de repeticiones. Por ejemplo, la cadena aaaaabbbbcc sería comprimida a a5b4c2. Como cada carácter va seguido de un único dígito, secuencias de más de 9 caracteres deben ser fraccionadas en bloques de no más de 9 caracteres. Por ejemplo, la cadena aaaaaaaaaaaa podría comprimirse como a9a3. Utilizando la función span anterior, completa las funciones bloque y comprime. La primera toma un carácter y un número y genera el bloque para ese carácter; la segunda toma una cadena de caracteres y la devuelva comprimida. Por ejemplo: bloque a 12 comprime "aaaaabbbbbbbbbbbbcc" ==> "a9a3" ==> "a5b9b3c2" bloque x n n <= 9 = x:show n otherwise = x: 9 :bloque x (n-9) comprime [] = "" comprime (x:xs) = bloque x (1+length cx) ++ comprime rs where (cx,rs) = span (==x) xs (b)(1,5 pts.) Escribe una función descomprime que tome una cadena de caracteres comprimida y devuelva la original. Por ejemplo: descomprime "a5b9b3c2" ==> "aaaaabbbbbbbbbbbbcc" Utiliza la función predefinida read que transforma una cadena en un entero: read "7" ==> 7 descomprime [] = "" descomprime (x:n:xs) = take (read [n]) (repeat x) ++ descomprime xs

7 Ejercicio 3 Considera la siguiente definición de árboles con nodos de uno y dos hijos, no vacíos, y con información en nodos y hojas: data ArbolI a = Hoja a Uno a (ArbolI a) Dos (ArbolI a) a (ArbolI a) deriving Show Se pretende utilizar este árbol para alojar elementos de manera que simule un árbol binario de búsqueda. En ese sentido, en un nodo Dos, la raíz debe ser mayor o igual que los elementos de la rama izquierda y menor que los de la derecha, mientras que en un nodo Uno, la raíz debe ser mayor o igual que los elementos de la rama inferior. (a)(0,75 pts.) Define la función inserta que inserta un elemento en un árbol ordenado de este tipo de manera que se mantenga ordenado. inserta :: Ord a => a -> ArbolI a -> ArbolI a inserta x (Hoja y) x <= y = Uno y (Hoja x) x > y = Uno x (Hoja y) inserta x (Uno y r) x <= y = Uno y (inserta x r) x > y = Dos r y (Hoja x) inserta x (Dos ri y rd) x <= y = Dos (inserta x ri) y rd x > y = Dos ri y (inserta x rd) (b)(0,75 pts.) Dada la función aarbol (x:xs) = aarbol (Hoja x) xs define la función aarbol que inserta todos los elementos de la lista xs en un árbol ordenado manteniéndolo ordenado. aarbol = foldr inserta (c)(0,5 pts.) Define la función enorden que hace un recorrido en orden de los elementos de manera que la lista resultante estará ordenada. enorden :: ArbolI a -> [a] enorden (Hoja x) = [x] enorden (Uno x r) = enorden r ++ [x] enorden (Dos ri x rd) = enorden ri ++ x:enorden rd (d)(1 pto.) Si consideramos la siguiente función de plegado para estos árboles foldi :: (b -> a -> b -> b) -> (a -> b -> b) -> (a -> b) -> ArbolI a -> b foldi f g h (H x) = h x foldi f g h (Uno x r) = g x (foldi f g h r) foldi f g h (Dos ri x rd) = f (foldi f g h ri) x (foldi f g h rd) Define la función anterior a partir de este plegado. enorden = foldi (\si x sd -> si++x:sd) (\x s-> s++[x]) (:[])

Programación Declarativa UNIVERSIDAD DE MÁLAGA

Programación Declarativa UNIVERSIDAD DE MÁLAGA Programación Declarativa UNIVERSIDAD DE MÁLAGA (3 o de Ingeniería Técnica en Informática) E.T.S.I. INFORMÁTICA Septiembre de 2006 mbre: Especialidad: Prolog Grupo: Ejercicio 1.1 (1 punto) Realizad el árbol

Más detalles

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

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

Más detalles

Práctica N o 1 - Programación Funcional

Práctica N o 1 - Programación Funcional Práctica N o 1 - Programación Funcional Para resolver esta práctica, recomendamos usar el Hugs 98, de distribución gratuita, que puede bajarse de http://www.haskell.org/hugs/. Ejercicio 1 Dado el siguiente

Más detalles

Tema Árboles binarios fmap para árboles binarios Plegado de árboles binarios

Tema Árboles binarios fmap para árboles binarios Plegado de árboles binarios Programación Declarativa Haskell Informática Sistemas Curso 2003-2004 Pepe Gallardo Universidad de Málaga Tema 9. Árboles 9.1 Árboles binarios fmap para árboles binarios Plegado de árboles binarios 9.2

Más detalles

Tema Árboles generales. 9.2 Árboles binarios 9.3 Árboles de búsqueda

Tema Árboles generales. 9.2 Árboles binarios 9.3 Árboles de búsqueda Informática Haskell Matemáticas Curso 2004-2005 Pepe Gallardo Universidad de Málaga Tema 9. Árboles 9.1 Árboles generales 9.2 Árboles binarios 9.3 Árboles de búsqueda 9.1 Árboles generales Un árbol es

Más detalles

Programación Declarativa Universidad de Málaga

Programación Declarativa Universidad de Málaga Programación Declarativa Universidad de Málaga 3. o de Ingeniería Informática E.T.S.I. Informática Enero de 2008 Tema 5. Programación lógica con árboles Ejercicios Ejercicio 1. Dada la siguiente representación

Más detalles

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

Programación Declarativa Haskell Informática Sistemas Curso Pepe Gallardo Universidad de Málaga. Tema 8. Listas Programación Declarativa Haskell Informática Sistemas Curso 2003-2004 Pepe Gallardo Universidad de Málaga Tema 8. Listas 8.1 Secuencias aritméticas 8.2 Algunas funciones predefinidas 8.3 Listas por comprensión

Más detalles

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

Informática Haskell Matemáticas Curso Pepe Gallardo Universidad de Málaga. Tema 8. Listas Informática Haskell Matemáticas Curso 2004-2005 Pepe Gallardo Universidad de Málaga Tema 8. Listas 8.1 Secuencias aritméticas 8.2 Algunas funciones predefinidas 8.3 Listas por comprensión Ejemplo: QuickSort

Más detalles

Programación con listas

Programación con listas Programación con Estructuras III.1 Programación con listas Unificación con listas. Dominio de definición Predicados sobre listas.tablas de comportamiento Predicados aritméticos con listas. Predicados iterativos

Más detalles

Tema 8: Funciones de orden superior

Tema 8: Funciones de orden superior Tema 8: Funciones de orden superior Programación declarativa (2010 11) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla 2 /

Más detalles

Tema 8: Funciones de orden superior

Tema 8: Funciones de orden superior Tema 8: Funciones de orden superior Programación declarativa (2009 10) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla Tema

Más detalles

1.1 Define un operador ( ) que devuelva True si y solo si tan solo uno de sus argumentos es True. Por ejemplo:? (3 > 2) (2 > 5)

1.1 Define un operador ( ) que devuelva True si y solo si tan solo uno de sus argumentos es True. Por ejemplo:? (3 > 2) (2 > 5) 1 Informática Haskell Matemáticas Curso 2004-2005 Pepe Gallardo Universidad de Málaga Práctica 1 1.1 Define un operador ( ) que devuelva True si y solo si tan solo uno de sus argumentos es True. Por ejemplo:?

Más detalles

data Tree a = Tip Node a (Tree a) (Tree a) deriving Show

data Tree a = Tip Node a (Tree a) (Tree a) deriving Show Preguntas seleccionadas de pruebas de evaluación Pregunta 1 Dadas las siguientes definiciones: data Tree a = Tip Node a (Tree a) (Tree a) deriving Show cambiar :: [Int] -> Tree [Int] -> Tree [Int] cambiar

Más detalles

Tema 23: Técnicas de diseño descendente de algoritmos

Tema 23: Técnicas de diseño descendente de algoritmos Tema 23: Técnicas de diseño descendente de algoritmos Informática (2010 11) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla

Más detalles

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

n! = 1 2 n 0! = 1 (n+1)! = (n + 1) n! Capítulo 3 Recursión La recursión es un estilo autoreferencial de definición usado tanto en matemática como en informática. Es una herramienta de programación fundamental, particularmente importante para

Más detalles

Informática de 1 o de Matemáticas. Ejercicios de Introducción a Haskell. Ejercicio 1 Consideremos la siguiente definición:

Informática de 1 o de Matemáticas. Ejercicios de Introducción a Haskell. Ejercicio 1 Consideremos la siguiente definición: Ejercicios de Introducción a Haskell Informática de 1 o de Matemáticas Ejercicio 1 Consideremos la siguiente definición: doble x = x + x El valor de doble(doble 3) se puede calcular usando distintos métodos

Más detalles

Tema 6: Funciones recursivas

Tema 6: Funciones recursivas Tema 6: Funciones recursivas Programación declarativa (2009 10) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla Tema 6: Funciones

Más detalles

Tema II: Introducción al Lenguaje Funcional

Tema II: Introducción al Lenguaje Funcional Tema II: Introducción al Lenguaje Funcional Características de Haskell Lenguaje funcional de o. superior fuertemente tipificado. Clasifica los entes de un programa en: objetos (constantes y funciones)

Más detalles

Programación lógica con listas

Programación lógica con listas Ingeniería Informática Ingeniería Técnica en Informática de Sistemas Departamento de Lenguajes y Ciencias de la Computación Universidad de Málaga Contenido 1. Programación básica con listas 2. Generar/comprobar

Más detalles

Guía 2: Listas, recursión e inducción

Guía 2: Listas, recursión e inducción Introducción a los Algoritmos - 2do cuatrimestre 2014 Guía 2: Listas, recursión e inducción Docentes: Walter Alini, Luciana Benotti En esta guía comenzaremos a trabajar con listas Para familiarizarnos

Más detalles

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

Tipos algebraicos y abstractos. Algoritmos y Estructuras de Datos I. Tipos algebraicos Algoritmos y Estructuras de Datos I 1 cuatrimestre de 009 Departamento de Computación - FCEyN - UBA Programación funcional - clase Tipos algebraicos Tipos algebraicos y abstractos ya vimos los tipos básicos

Más detalles

Tema 7: Razonamiento sobre programas

Tema 7: Razonamiento sobre programas Tema 7: Razonamiento sobre programas Programación declarativa (2009 10) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla Tema

Más detalles

Tema 13: Aplicaciones de programación funcional

Tema 13: Aplicaciones de programación funcional Tema 13: Aplicaciones de programación funcional Programación declarativa (2010 11) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de

Más detalles

Programación Funcional

Programación Funcional Alberto Pardo Marcos Viera Instituto de Computación, Facultad de Ingeniería Universidad de la República, Uruguay Operaciones sobre listas Listas El tipo de las listas es uno de los más usados en PF Su

Más detalles

Tema 7. El sistema de clases

Tema 7. El sistema de clases Programación Declarativa Haskell Informática Sistemas Curso 2003-2004 Pepe Gallardo Universidad de Málaga Tema 7. El sistema de clases 7.1 Funciones Sobrecargadas Clases e Instancias 7.2 Algunas Clases

Más detalles

Tema 9: Declaraciones de tipos y clases

Tema 9: Declaraciones de tipos y clases Tema 9: Declaraciones de tipos y clases Programación declarativa (2009 10) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla

Más detalles

Tema 4: Definición de funciones

Tema 4: Definición de funciones Programación declarativa (2009 10) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla Constantes como patrones Variables como

Más detalles

Programación con listas. El tipo lista

Programación con listas. El tipo lista Capítulo 6. Programación con listas 68 Programación con listas El tipo lista La lista representa colecciones de objetos homogéneas (todos los objetos han de tener el mismo tipo). infixr 5 : data [a] =

Más detalles

Tema 4: Definición de funciones

Tema 4: Definición de funciones Tema 4: Definición de funciones Informática (2010 11) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla 2 / 30 Tema 4: Definición

Más detalles

Tipos en Haskell. Cecilia Manzino

Tipos en Haskell. Cecilia Manzino Tipos Tipo: conjunto de valores asociados a operaciones. Ejemplos: enteros, caracteres, booleanos, funciones de enteros a enteros. Sirven para: detectar errores antes de la evaluación especificar programas

Más detalles

Abstracción de procedimientos

Abstracción de procedimientos Abstracción de procedimientos 1.- Consideremos ABN (árboles binarios numéricos) sin nodos repetidos. Denimos los siguientes conceptos: Se pide: Dados dos ABN, A y B, decimos que B es SUBARBOL PRINCIPAL

Más detalles

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

Programación Declarativa Haskell Informática Sistemas Curso Pepe Gallardo Universidad de Málaga Programación Declarativa Haskell Informática Sistemas Curso 2008-2009 Pepe Gallardo Universidad de Málaga Tema 1 1.1 Considérense las siguientes definiciones de funciones: inc :: Float Float inc x = x

Más detalles

Tema 2. Tipos predefinidos

Tema 2. Tipos predefinidos Programación Declarativa Haskell Informática Sistemas Curso 2003-2004 Pepe Gallardo Universidad de Málaga Tema 2. Tipos predefinidos 2.1 Tipos simples predefinidos El tipo Bool El tipo Int El tipo Integer

Más detalles

Estructura de Datos Unidad 6: ARBOLES

Estructura de Datos Unidad 6: ARBOLES Estructura de Datos Unidad 6: ARBOLES A. CONCEPTO DE ARBOL B. TIPOS DE ARBOL C. ARBOL BINARIO D. IMPLEMENTACION DE UN ARBOL BINARIO E. PROYECTO Introducción En ciencias de la informática, un árbol es una

Más detalles

Guía 2: Funciones, listas, recursión e inducción

Guía 2: Funciones, listas, recursión e inducción Introducción a los Algoritmos - 1er cuatrimestre 2013 Guía 2: Funciones, listas, recursión e inducción El objetivo de los siguientes ejercicios es introducirnos en la programación funcional, es decir,

Más detalles

Exámenes de Programación funcional con Haskell ( )

Exámenes de Programación funcional con Haskell ( ) Exámenes de Programación funcional con Haskell (2009 2014) José A. Alonso (coord.) y Gonzalo Aranda, Antonia M. Chávez, Andrés Cordón, María J. Hidalgo, Francisco J. Martín Miguel A. Martínez, Ignacio

Más detalles

El sistema de clases de Haskell. Introducción

El sistema de clases de Haskell. Introducción Capítulo 5. El sistema de clases de Haskell 56 El sistema de clases de Haskell Introducción Función monomórfica: sólo se puede usar para valores de un tipo concreto not :: Bool Bool not True = False not

Más detalles

Tema 9: Declaraciones de tipos y clases

Tema 9: Declaraciones de tipos y clases Tema 9: Declaraciones de tipos y clases Informática (2016 17) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla 2 / 41 Tema 9:

Más detalles

Estructuras incompletas. Listas diferencia.

Estructuras incompletas. Listas diferencia. Estructuras incompletas. Listas diferencia. 1 / 13 Estructuras incompletas Proporcionan una técnica de implementación muy potente propia de Prolog: Incrementan radicalmente la eficiencia de muchos programas.

Más detalles

Tipos de datos algebraicos

Tipos de datos algebraicos Tipos de datos algebraicos Taller de Álgebra I Segundo cuatrimestre de 2013 Programación funcional Recordemos que un tipo de datos es un conjunto dotado con una serie de operaciones sobre los elementos

Más detalles

Tema 6. Definiciones de tipos

Tema 6. Definiciones de tipos Programación Declarativa Haskell Informática Sistemas Curso 2003-2004 Pepe Gallardo Universidad de Málaga Tema 6. Definiciones de tipos 6.1 Sinónimos de tipo 6.2 Definiciones de tipos de datos Tipos enumerados

Más detalles

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

Estructura de datos y de la información Boletín de problemas - Tema 10 Estructura de datos y de la información Boletín de problemas - Tema 10 1. En el caso de que sea posible, dar un ejemplo de los siguientes puntos. Si no, explicar por qué no lo es. Considerar un valor genérico

Más detalles

PROGRAMACIÓN DECLARATIVA

PROGRAMACIÓN DECLARATIVA UNIVERSIDAD DE MALAGA DEPARTAMENTO DE LENGUAJES Y CIENCIAS DE LA COMPUTACION PROGRAMACIÓN DECLARATIVA CURSO 2000-2001 I. PROGRAMACIÓN LÓGICA II. PROGRAMACIÓN FUNCIONAL BIBLIOGRAFÍA Programación Lógica:

Más detalles

Tema 21: Algoritmos de exploración de grafos

Tema 21: Algoritmos de exploración de grafos Tema 21: Algoritmos de exploración de grafos Informática (2009 10) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla Tema 21:

Más detalles

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

Práctica N o 5 - Programación Lógica Práctica N o 5 - Programación Lógica Para resolver esta práctica, recomendamos usar el SWI-Prolog, de distribución gratuita, que puede bajarse de http://www.swi-prolog.org. No utilizar cut (!) ni predicados

Más detalles

Análisis y Complejidad de Algoritmos. Arboles Binarios. Arturo Díaz Pérez

Análisis y Complejidad de Algoritmos. Arboles Binarios. Arturo Díaz Pérez Análisis y Complejidad de Algoritmos Arboles Binarios Arturo Díaz Pérez Arboles Definiciones Recorridos Arboles Binarios Profundidad y Número de Nodos Arboles-1 Arbol Un árbol es una colección de elementos,

Más detalles

Programación Declarativa Ejercicios de programación con listas

Programación Declarativa Ejercicios de programación con listas Programación Declarativa Ejercicios de programación con listas Ejercicio 1 Define versiones recursivas de los siguientes predicados sobre listas: es lista(xs) Xs es una lista bien formada es lista nat(ss)

Más detalles

Introducción a Haskell. Cecilia Manzino

Introducción a Haskell. Cecilia Manzino Paradigmas de programación Un paradigma de programación representa un estilo particular o filosofía para la construcción del software. Los más comunes dan lugar a los siguientes tipos de programación:

Más detalles

Programación Funcional Haskell Clase 21

Programación Funcional Haskell Clase 21 Programación Funcional Haskell Clase 21 José Raymundo Marcial Romero rmarcial@fi.uaemex.mx BUAP c José Raymundo Marcial Romero. Clase Número 21 p.1/12 Temas de la clase Clase Anterior En Haskell cada expresión

Más detalles

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

Práctica N o 4 - Programación Lógica Práctica N o 4 - Programación Lógica Para resolver esta práctica, recomendamos usar el SWI-Prolog, de distribución gratuita, que puede bajarse de http://www.swi-prolog.org. No utilizar cut (!) ni predicados

Más detalles

Árboles balanceados (AVL) Tablas de dispersión (Hash) Colas de prioridad (Heap)

Árboles balanceados (AVL) Tablas de dispersión (Hash) Colas de prioridad (Heap) Práctico 4 Árboles balanceados (AVL) Tablas de dispersión (Hash) Colas de prioridad (Heap) Clasificación de ejercicios: (I) Imprescindibles (R) Recomendados (C) Complementarios Árboles balanceados (AVL)

Más detalles

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

Metodología de Programación I Tutorial Prolog 2/3 Metodología de Programación I Tutorial Prolog 2/3 Dr. Alejandro Guerra-Hernández Departamento de Inteligencia Artificial Facultad de Física e Inteligencia Artificial aguerra@uv.mx http://www.uv.mx/aguerra

Más detalles

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

Teoría de los Lenguajes de Programación Práctica curso Teoría de los Lenguajes de Programación Práctica curso 2013-2014 Índice 1. Introducción: Sumas...3 2. Enunciado de la práctica...3 2.1 Método de Resolución...3 Generación de los nodos...4 Función Principal...5

Más detalles

Tema IV Programación lógica con estructuras

Tema IV Programación lógica con estructuras Tema IV Programación lógica con estructuras Programación Lógica - E.T.S.I. Informática - Málaga 1 Términos La estructura de datos básica en PROLOG es el término. Los términos se clasifican en : variables

Más detalles

Curso Básico de Computación

Curso Básico de Computación CINVESTAV IPN México City 2010 1 Preliminares 1.1 Cadenas, alfabetos y lenguajes Un símbolo es un ente abstracto que no se puede definir formalmente. Letras o dígitos son ejemplos

Más detalles

Ejercicios de programación funcional con Haskell

Ejercicios de programación funcional con Haskell Ejercicios de programación funcional con Haskell José A. Alonso Jiménez Grupo de Lógica Computacional Dpto. de Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Sevilla, 8 de

Más detalles

Programación Declarativa

Programación Declarativa Programación Declarativa Ingeniería Informática Especialidad de Computación Cuarto curso. Primer cuatrimestre Escuela Politécnica Superior de Córdoba Universidad de Córdoba Curso académico: 2018 2019 Práctica

Más detalles

ALPII Práctica 3. Bernardo García Fuentes

ALPII Práctica 3. Bernardo García Fuentes ALPII Práctica 3 Bernardo García Fuentes 1 Ej. 1................................................................................................. modulus :: [Float] -> Float modulus = sqrt.sum.map square

Más detalles

EJERCICIOS DE LENGUAJES Y PARADIGMAS DE PROGRAMACIÓN (CUESTIONES DE EXAMEN) PROGRAMACIÓN FUNCIONAL

EJERCICIOS DE LENGUAJES Y PARADIGMAS DE PROGRAMACIÓN (CUESTIONES DE EXAMEN) PROGRAMACIÓN FUNCIONAL EJERCICIOS DE LENGUAJES Y PARADIGMAS DE PROGRAMACIÓN (CUESTIONES DE EXAMEN) PROGRAMACIÓN FUNCIONAL María Alpuente y María José Ramírez 1 LENGUAJES Y PARADIGMAS: INTRODUCCIÓN 1. Indica cuál de las siguientes

Más detalles

Tipos paramétricos y recursivos

Tipos paramétricos y recursivos Tipos paramétricos y recursivos Taller de Álgebra I Verano 2017 Tipos paramétricos Tipos paramétricos Podemos hacer que los constructores de un tipo de datos reciban parámetros. A los tipos construidos

Más detalles

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

Manos a la obra: Recursión, división y listas Manos a la obra: Recursión, división y listas Taller de Álgebra I Cuatrimestre de verano de 2015 Calentando motores La clase pasada vimos ejemplos de definiciones recursivas. Hoy vamos a continuar con

Más detalles

Tema 3. Patrones y Definiciones de Funciones

Tema 3. Patrones y Definiciones de Funciones Programación Declarativa Haskell Informática Sistemas Curso 2003-2004 Pepe Gallardo Universidad de Málaga Tema 3. Patrones y Definiciones de Funciones 3.1 Comparación de Patrones Patrones constantes Patrones

Más detalles

PROGRAMACIÓN ORIENTADA A LA INTELIGENCIA ARTIFICIAL

PROGRAMACIÓN ORIENTADA A LA INTELIGENCIA ARTIFICIAL PROGRAMACIÓN ORIENTADA A LA INTELIGENCIA ARTIFICIAL Ejercicios de programación en LISP y PROLOG prog-ia@dia.uned.es Dpto. Inteligencia Artificial E.T.S.I. Informática (UNED) C/ Juan del Rosal 16 28040

Más detalles

Francisco J. Hernández López

Francisco J. Hernández López rancisco. Hernández ópez fcoj23@cimat.mx structura de datos no lineal, en la que cada elemento sólo puede estar enlazado con su predecesor (o nodo padre) y sus sucesores (o nodos hijos) xiste un único

Más detalles

Control en Prolog. Control

Control en Prolog. Control Control sobre La búsqueda El retroceso La unificación Aplicaciones. Control en Prolog Recorrido sobre grafos Sin repetir nodo Sin repetir arco Control La búsqueda mediante un predicado sin argumentos!

Más detalles

Tema 1. Tema 2. Informática Haskell Matemáticas Curso Pepe Gallardo Universidad de Málaga

Tema 1. Tema 2. Informática Haskell Matemáticas Curso Pepe Gallardo Universidad de Málaga Informática Pepe Gallardo Universidad de Málaga 1 Informática Haskell Matemáticas Curso 2004-2005 Pepe Gallardo Universidad de Málaga Tema 1 1.1 Considérense las siguientes definiciones de funciones: inc

Más detalles

A) PREORDEN B) INORDEN C) POSTORDEN D) NIVELES

A) PREORDEN B) INORDEN C) POSTORDEN D) NIVELES Capitulo 5. Arboles 1. Al recorrer el siguiente árbol en se visitan más nodos para llegar al número 38. Justifique su respuesta mostrando cada uno de los recorridos. Tipo de Recorrido Recorrido A) PREORDEN

Más detalles

Programación Declarativa

Programación Declarativa Programación Declarativa Ingeniería Informática Especialidad de Computación Cuarto curso. Primer cuatrimestre Escuela Politécnica Superior de Córdoba Universidad de Córdoba Curso académico: 2017 2018 Práctica

Más detalles

Tema 6: Estructuras de datos recursivas

Tema 6: Estructuras de datos recursivas Tema 6: Estructuras de datos recursivas Índice 1 Listas jerárquicas...2 2 Árboles binarios... 4 3 Árboles genéricos...7 4 Referencias...10 1. Listas jerárquicas Las listas tienen la propiedad de la clausura

Más detalles

Ejercicio 2 Considere la representación para Lista de Naturales y Árbol Binario de Naturales de la Figura 1.

Ejercicio 2 Considere la representación para Lista de Naturales y Árbol Binario de Naturales de la Figura 1. Ejercicios Resueltos del Práctico 4 Ejercicio 2 Considere la representación para Lista de Naturales y Árbol Binario de Naturales de la Figura 1. 1 2 struct NodoLista { 3 int elem ; 4 NodoLista * sig ;

Más detalles

EJERCICIOS RESUELTOS DE PROLOG

EJERCICIOS RESUELTOS DE PROLOG Ejercicio N 1 EJERCICIOS RESUELTOS DE PROLOG Dado el grafo dirigido representado en la siguiente figura: b c a d e Una representación para el mismo en Prolog podría consistir en una lista que contenga

Más detalles

Programación 2 Práctico 9 - TADs Árbol Binario de Búsqueda, Árbol Finitario y Árbol n-ario

Programación 2 Práctico 9 - TADs Árbol Binario de Búsqueda, Árbol Finitario y Árbol n-ario Práctico - TADs Árbol Binario de Búsqueda, Árbol Finitario y Árbol n-ario Objetivos Trabajar con los tipos abstractos de datos Árbol Binario de Búsqueda, Árbol Finitario y Árbol n-ario. Desarrollar y analizar

Más detalles

PROGRAMACIÓN ORIENTADA A LA INTELIGENCIA ARTIFICIAL

PROGRAMACIÓN ORIENTADA A LA INTELIGENCIA ARTIFICIAL PROGRAMACIÓN ORIENTADA A LA INTELIGENCIA ARTIFICIAL Ejercicios de programación en LISP y PROLOG Angeles Manjarrés Riesco Severino Fernández Galán Jesús González Boticario prog-ia@dia.uned.es Dpto. Inteligencia

Más detalles

LENGUAJES Y GRAMÁTICAS

LENGUAJES Y GRAMÁTICAS LENGUAJES Y GRAMÁTICAS Orlando Arboleda Molina Escuela de Ingeniería de Sistemas y Computación de La Universidad del Valle 20 de septiembre de 2008 Contenido Lenguajes y Gramáticas Gramáticas Gramáticas

Más detalles

Estructura de Datos. Estructuras de Datos no lineales : Árboles

Estructura de Datos. Estructuras de Datos no lineales : Árboles Estructura de Datos Estructuras de Datos no lineales : Árboles Definiciones de Árbol En términos matemáticos, un árbol es cualquier conjunto de puntos, llamados vértices, y cualquier conjunto de pares

Más detalles

Programación Funcional Haskell Clase 22

Programación Funcional Haskell Clase 22 Programación Funcional Haskell Clase 22 José Raymundo Marcial Romero rmarcial@fi.uaemex.mx BUAP c José Raymundo Marcial Romero. Clase Número 22 p.1/?? Temas de la clase Tipos Numéricos de Haskell Tipos

Más detalles

Curso Básico de Computación Preliminares

Curso Básico de Computación Preliminares Curso Básico de Computación Preliminares Feliú Sagols Troncoso Matemáticas CINVESTAV-IPN 2010 Curso Básico de Computación (Matemáticas) Preliminares 2010 1 / 11 1 Preliminares

Más detalles

TEMA 0 REPASO DE CONCEPTOS BÁSICOS TEST PARA AUTOEVALUACIÓN DEL ALUMNO

TEMA 0 REPASO DE CONCEPTOS BÁSICOS TEST PARA AUTOEVALUACIÓN DEL ALUMNO TEMA 0 REPASO DE CONCEPTOS BÁSICOS TEST PARA AUTOEVALUACIÓN DEL ALUMNO NOTA: Sólo hay una respuesta válida. Responder a las preguntas justo en el orden en que están planteadas. A) Fundamentos de Matemáticas:

Más detalles

Lenguajes y Compiladores Aspectos Formales (Parte 1) Compiladores

Lenguajes y Compiladores Aspectos Formales (Parte 1) Compiladores Facultad de Ingeniería de Sistemas Lenguajes y Aspectos Formales (Parte 1) 1 Aspectos Formales Los compiladores traducen lenguajes que están formalmente definidos a través de reglas que permiten escribir

Más detalles

Tema 3. Patrones y Definiciones de Funciones

Tema 3. Patrones y Definiciones de Funciones Informática Haskell Matemáticas Curso 2004-2005 Pepe Gallardo Universidad de Málaga Tema 3. Patrones y Definiciones de Funciones 3.1 Comparación de Patrones Patrones constantes Patrones para listas Patrones

Más detalles

ESTRUCTURAS DE DATOS Y ALGORITMOS

ESTRUCTURAS DE DATOS Y ALGORITMOS ESTRUCTURAS DE DATOS Y ALGORITMOS CURSO 2009 PRÁCTICO 8 Nota: al igual que en los prácticos 6 y 7, en los problemas que siguen se usarán los tipos lista y árbol binario, como tipos abstractos, cada uno

Más detalles

EJE N 3 : ECUACION LINEAL, CUADRATICA Y SISTEMA DE ECUACIONES

EJE N 3 : ECUACION LINEAL, CUADRATICA Y SISTEMA DE ECUACIONES TALLER DE INGRESO 018 EJE N : ECUACION LINEAL, CUADRATICA Y SISTEMA DE ECUACIONES ECUACIONES DE PRIMER GRADO CON UNA INCÓGNITA 1) Halla el valor de x a) b) c) d) e) f) g) h) i) j) k) l) m) n) ) Resolver

Más detalles

Ejercicios del Tema 3 Estructuras jerárquicas: Árboles

Ejercicios del Tema 3 Estructuras jerárquicas: Árboles ALGORITMOS Y ESTRUCTURAS DE DATOS II Ingeniería Técnica en Informática de Gestión Ingeniería Técnica en Informática de Sistemas Ejercicios del Tema 3 Estructuras jeráruicas: Árboles Árboles n-arios 1.

Más detalles

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

Programación lógica con árboles. Introducción. Contenido. Introducción. 1. Programación con árboles 2. Otras estructuras arbóreas Contenido 1. Programación con árboles 2. Otras estructuras arbóreas Ingeniería Informática Ingeniería Técnica en Informática Departamento de Lenguajes y Ciencias de la Computación Universidad de Málaga

Más detalles

recursion general 5.1 Heurísticas para la inducción Definición (Definición recursiva de inversa). inversa xs es la inversa de la lista xs.

recursion general 5.1 Heurísticas para la inducción Definición (Definición recursiva de inversa). inversa xs es la inversa de la lista xs. Capítulo 5 Heurísticas para la inducción y recursion general 5.1 Heurísticas para la inducción Definición 5.1.1 (Definición recursiva de inversa). inversa xs es la inversa de la lista xs. primrec inversa

Más detalles

Árboles. Un grafo no dirigido es un árbol si y sólo si existe una ruta unica simple entre cualquiera dos de sus vértices.

Árboles. Un grafo no dirigido es un árbol si y sólo si existe una ruta unica simple entre cualquiera dos de sus vértices. ÁRBOLES Árboles Un grafo conectado que no contiene circuitos simples. Utilizados desde 1857, por el matemático Ingles Arthur Cayley para contar ciertos tipos de componentes químicos. Un árbol es un grafo

Más detalles

Francisco J. Hernández López

Francisco J. Hernández López rancisco. Hernández ópez fcoj23@cimat.mx structura de datos no lineal, en la que cada elemento sólo puede estar enlazado con su predecesor (o nodo padre) y sus sucesores (o nodos hijos) xiste un único

Más detalles

Programación recursiva en Prolog

Programación recursiva en Prolog 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

Más detalles

Tema 3: Tipos y clases

Tema 3: Tipos y clases Tema 3: Tipos y clases Programación declarativa (2009 10) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla Tema 3: Tipos y clases

Más detalles

Tema 3: Tipos y clases

Tema 3: Tipos y clases Tema 3: Tipos y clases Programación declarativa (2010 11) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla Tema 3: Tipos y clases

Más detalles

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

Semántica Operacional para la Programación en Lógica Lógica para Ciencias de la Computación Semántica Operacional para la Programación en Lógica Lógica para Ciencias de la Computación Primer Cuatrimestre de 2009 Material Adicional Semánticas para la Programación n en LógicaL Se han explorado

Más detalles

Tema 3: Tipos y clases

Tema 3: Tipos y clases Tema 3: Tipos y clases Informática (2016 17) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla 2 / 32 IM Tema 3: Tipos y clases

Más detalles

Tema 3: Tipos y clases

Tema 3: Tipos y clases Tema 3: Tipos y clases Informática (2017 18) José A. Alonso Jiménez Grupo de Lógica Computacional Departamento de Ciencias de la Computación e I.A. Universidad de Sevilla 2 / 32 IM Tema 3: Tipos y clases

Más detalles

Análisis Comparativo de Lenguajes - Año 2018 Práctico Nro. 2 Lenguaje Prolog Corresponde al Apunte El lenguaje de programación Prolog

Análisis Comparativo de Lenguajes - Año 2018 Práctico Nro. 2 Lenguaje Prolog Corresponde al Apunte El lenguaje de programación Prolog Análisis Comparativo de Lenguajes - Año 2018 Práctico Nro. 2 Lenguaje Prolog Corresponde al Apunte El lenguaje de programación Prolog Ejercicio 1: Dado el siguiente programa Prolog: ciudad(la_punta). ciudad(mercedes).

Más detalles

Eliminación en un ABB

Eliminación en un ABB Eliminación en un El procedimiento para eliminar un nodo z de un árbol de búsqueda binaria tiene tres casos: aso 1: Si z no tiene hijos, se modifica su padre p[z] para reemplazar z con nil como su hijo.

Más detalles

Programación Declarativa

Programación Declarativa Programación Declarativa Ingeniería Informática Especialidad de Computación Cuarto curso. Primer cuatrimestre Escuela Politécnica Superior de Córdoba Universidad de Córdoba Curso académico: 2016 2017 Práctica

Más detalles