Está en la página 1de 4

Programaci on L ogica con recursividad: n umeros y listas

Curso 2003/04, Fecha:Diciembre


Enunciado 1 (N umeros naturales) Una posible codicaci on de n umeros naturales en Prolog se basa en la siguiente denici on: El cero es un n umero natural Si X es un n umero natural, entonces s(X) (siguiente de X) tambi en es un n umero natural Las reglas anteriores se codicar an en Prolog como:

natural (0). n a t u r a l ( s (X)): n a t u r a l (X ) . Compilar el programa anterior y comprobar si el dos (s(s(0))) es un n umero natural mediante la llamada natural(s(s(0)) Observar las respuestas del sistema ante la pregunta natural(X) Enunciado 2 (suma) La suma de n umeros naturales puede denirse con las siguientes reglas. 0+X=0 Si X + Y = Z entonces s(X) + Y = s(Z) En Prolog, dichas reglas pueden expresarse como:

suma ( 0 ,X,X ) . suma ( s (X) ,Y, s ( Z)): suma (X, Y, Z ) . Realizar la pregunta suma(s(s(0)),s(s (0)), X) Realizar la pregunta suma(s(s(0)),X,s(s(s(s (0))))) Realizar la pregunta suma(X,Y,s(s(s(s(0))))) 1

Enunciado 3 (producto) El producto de n umeros naturales se dene con las reglas: 0 X=0 Si X Y = Z entonces s(X) Y = Z + Y Dichas reglas pueden expresarse en Prolog como:

p r o d u c t o ( 0 ,X, 0 ) . p r o d u c t o ( s (X) ,Y,R): p r o d u c t o (X, Y, Z ) , suma ( Z , Y,R ) . Realizar diversas consultas para comprobar que realmente multiplica naturales Enunciado 4 (otros(Opcional)) Intentar denir otros predicados aritm eticos como: potencia(X,Y,Z) se cumple si Z es igual a X elevado a Y menor(X,Y) se cumple si X es menor que Y mcd(X,Y,Z) se cumple si Z es el m aximo com un divisor de X e Y etc. Enunciado 5 (Listas) En Prolog, existe una estructura recursiva que representa listas de elementos. La denici on podr a ser: [] (la lista vac a) es una lista Si L es una lista, entonces [XL] (el resultado de a nadir un elemento X al principio de L) tambi en es una lista. Las reglas anteriores se codicar an en Prolog como:

lista ([]). l i s t a ( [ X | L ] ) : l i s t a (L ) . Compilar el programa anterior y preguntar si [] es una lista Preguntar si [c [] ] es una lista Preguntar si [b [c [] ] ] es una lista Preguntar si [a [b [c [] ] ] ] es una lista En realidad, Prolog utiliza una notaci on simplicada para representar listas de forma que:

[] = [] [c [] ] = [c] [b [c [] ] ] = [b,c] [a [b [c [] ] ] ] = [a, b, c] Preguntar si [c], [b,c] y [a,b,c] son listas Enunciado 6 (pertenece) Para indicar si un elemento pertenece a una lista pueden denirse las reglas Cualquier X pertenece a una lista que empieza por X Si X pertenece a una lista L, entonces X pertenece a la lista [YL] para cualquier Y Las reglas anteriores se codicar an en Prolog como:

p e r t e n e c e (X , [ X | L ] ) . p e r t e n e c e (X , [ Y | L ] ) : p e r t e n e c e (X, L ) . Compilar el programa anterior y comprobar si b) pertenece a la lista [a,b,c] Preguntar si existe alg un elemento que pertenezca a la lista [a,b,c] Preguntar si existe alguna lista a la que pertenezca el elemento a Enunciado 7 (concatena) Para concatenar dos listas pueden denirse las reglas La lista vac a concatenada con cualquier lista L es igual a L Si al concatenar L y M se obtiene N entonces al concatenar [X L] con M se obtiene [X N] Las reglas anteriores se codicar an en Prolog como:

concatena ( [ ] , L,L ) . c o n c a t e n a ( [ X | L ] ,M, [ X | N] ) : c o n c a t e n a (L ,M,N ) . Realizar una pregunta para conocer el resultado de concatenar las listas [a,b,c] y [1,2,3] Realizar una pregunta que permita calcular si existe una lista L tal que al concatenar [a,b] con L se obtenga [a,b,c,d,e]

Realizar una pregunta que permita calcular las listas L y M tales que al concatenar ambas se obtiene [a,b,c,d,e] Enunciado 8 (prejo) Construir un predicado en Prolog que indica si una lista es un prejo de otra Enunciado 9 (sujo) Construir un predicado en Prolog que indica si una lista es un sujo de otra Enunciado 10 (Otros con listas(Opcional)) Construir otros predicados con listas como: sublista (L,M) se cumple si L es una sublista de M ultimo(X,L) se cumple si X es el u ltimo elementos de L inserta (X,L,M) se cumple si M es el resultado de insertar el elemento X en alguna posici on de la lista L etc.