You are on page 1of 36



PRACTICAS
DE PROLOG
L
ogica
Ingenier 
a Inform
atica

Departamento de Matematica Aplicada
Universidad de Zaragoza
Francisco Jose Gaspar
Inmaculada Gomez
Natalia Boal

Presentaci
on

El texto que aqu se presenta corresponde a la parte practica de la asignatura
de Logica en la titulacion de Ingeniera Informatica. Esta asignatura tiene
caracter optativo y se viene impartiendo por el Departamento de Matemtica
Aplicada en el Centro Politecnico Superior de la Universidad de Zaragoza.
No cabe duda que la realizacion de practicas con ordenador en esta asignatura es fundamental para el aprendizaje del lenguaje de programacion
Prolog.
En este cuadernillo se proporciona una coleccion de ejercicios con la

nalidad de que el alumno avance en el conocimiento del Prolog. El texto
se compone de cinco partes que corresponden de una forma natural a cada
una de las cinco sesiones practicas que tiene la asignatura. Estas practicas
constan de unos ejercicios de caracter teorico que sirven para a

anzar los conocimientos adquiridos en clase y de ejercicios espec.

cos de programacion. Los autores . con el cual poder alcanzar objetivos mas ambiciosos. Se pretende que estas notas ayuden al alumno a conseguir un dominio en la programacion en Prolog.

1. . . . . . . . . . Los hechos . . . . . . . . .1 Listas . . . . . . 4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2. . . . . . . . . . . . . .6. . . . . . .4 Una agencia de viajes . . . . . . . . . . . . . . . . . . . . . .2 El predicado corte y el predicado fail 3. . . . . . . . .3 Ejercicios propuestos . . .7 El factorial . . . . 4. . . .1 Backtracking . . . . . . . 1. . . . . . . . . . . . . . . . . .4 1. . . . . . . . .2 La funcion de D'Ackerman . . . . .3 El predicado interseccion . . 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2. Las reglas . 3. . . .2 El predicado igual . . . . . . . . . . . . . . . . . . . . . . 2. . . . . . . . 2 La aritmetica en PROLOG 3 El proceso de Backtracking 3. . . . . .3. . . . . .4 Campeonato de tenis . . . . . . 4 Listas y recursion . . .3 El predicado suma . .3 Ejercicios propuestos . . . . .6 Las races de una ecuacion de segundo grado 2. . . . . 3. . . . . . .Contents 1 Introduccion al lenguaje PROLOG 1.3 Ejercicios propuestos . . . . . . .6.1 Sobre el predicado corte .3. . . . . . . . . .2 Predicados con listas . . . . . . .5 El mnimo comun multiplo . . .1 1. .4 El predicado maximo .1 Algunos predicados sobre listas . . . . . . . . . . . . . .3. 1. . . . . . . . . . .3. . . . . . . . . . . . .2 Parentescos . . . . . 1. . 4. . . . . . . . . . . . . . . . . . . . . . . . . .6. . . . . . . . . . . . .3. . . . . . 4. . . . .5 1. . . . . . . . 2. . . . . . . . . . .2 Los numeros naturales . . . . . . . . . . . . . . . . . . . . . . . Las variables .3 1. . . . . . . .1 >Vegetal o animal? . . . . . . . . .1 Sobre el predicado igual . . 2. . . . . . . . . . . . . . . 5 5 5 6 6 6 7 7 8 8 9 10 10 10 11 11 11 12 12 12 12 12 13 13 13 14 14 15 15 16 17 17 17 18 18 18 .3.3. . 3. . . . . . . . . .3. . . 2. . . . . . . 2. .3 Una agencia matrimonial .2 Predicados elementales sobre listas . . . . . . . . .6. . . . . . .3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3. . . . .3. . . . . . . . . . . . . . . La estructura de un programa en PDC-PROLOG Ejercicios propuestos . . . . . . . . . . . 4. .1 Variable instanciada . . . . . . . . . .3. . . . . . . . . . . . . . . .2 1. . . . . . . . . . 2. . . . . . . . . . . . . . . . . . . . . . . . . . .6 Generalidades . . . . . .3. . 3. . . . . . . 3. . . .

. . . . . . . . . . . . . . . . .1 pescalar(L1. . . . . . .7 permuta(L. .P) . . . . . 5. . . . . . 5. . . . . . . . . . . .1. . . . . .21 Pim{Pam{Pum . 5. . . . . . . . .1. . . . . . . . . . . . . . . . . . . .1. . . . . . . . . . . . . . 5. . . . . . 5.27 El acertijo del salvamento del fuego 5. . . . . . . . . . . . . . . .P) . . 5. . .L2.1. . . . . . . . 5. . . . . . . .1 Ejercicios . . . . . . . . 5. . . . . .1. . 5. . . . . . .30 Antes y despues . 5. . .1. . . .16 Las torres de Hanoi . . . . . . . . . . . . . . . . . . . . . . . . . . .1. . . . . 5. . . . . . . . . . . . . . . . . . . . . . . . . . 5. . . . . . . . . . . . . . . . .5 numerodeveces(L) . . . . . . . . . .3 trescopias(L) . . . . . . .13 El estanco . .1. . . . . .12 El juego de las cifras . . . . . . . . .1. .1. . . . .1. . . . . . . . . . . . . . . . .24 Un acertijo de arquera .1. . . . . . .1. . . . . .1. . 5. . .L2) . . .N. . .20 Duros y pesetas . . . . . . .1. . . . . . . . .L2. . . . . . . . .5 Acertijos y juegos 5. . . . . .23 En el pas de los acertijos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5. . . . . . . . .18 Problema del grafo . 5. . . . . . . 5. . . . . . . 5.29 El problema del convento . . . . 5. . . . . . .1. .9 burbuja(L1. . .1. 5. 5. . .1. . . 5.1. . . .1.1. . .31 El rompecabezas 14-15 . . . . . . . . . . . . . . .L) . . . . 5. . . . . . . . . . . . . . . . . . . . . .10 domino(L) .L3) . . . . . .15 Un acertijo con aceite y vinagre . . . . . . . .1. . . . . . . . .2 sumadelosdemas(L) . 5. . . . .1. .17 El acertijo del lechero . 5. . .19 Las 9 casillas . .22 Las nueve monedas . . . . . . . . . . 5. . 5. .1. 5. . . .4 capicua(L) . . . . . .14 N turistas en 3 habitaciones . . . . . .1. . . 5. . .1. . .11 Grupos de personas . . . . . . . 5. . . 20 20 20 20 20 20 20 20 20 21 21 21 21 21 23 23 23 23 24 25 26 27 27 28 29 29 30 30 31 32 33 34 35 . . . . .1. .6 dados(P. . . . . . . .8 merge(L1. . . . . . . . . . . . . . . . . .1. . . . . . . . . . . . . . . . . .1. . . . . . . . . . . . . . . . . . . . . . . . . . . .1. . . .1.28 Descarte a los varones . . . . . . . . . . . . . . . .25 Tiro al pavo . . . . . . . 5.26 El acertijo de la mudanza . . .

de.1 Introducci on al lengua je PROLOG 1. La programacion en Prolog consiste simplemente en:    declarar hechos sobre los objetos y sus relaciones.1 Generalidades Prolog es un lenguaje de programacion que se utiliza para resolver problemas en los que existen objetos y relaciones entre objetos.

lo cual quiere decir que el ordenador y el programador sostienen una especie de conversacion. y hacer preguntas. Prolog es un lenguaje de programacion coloquial.nir reglas sobre dichos objetos y relaciones. Prolog esperara a que introduzcas los hechos y las reglas que de.

. si se hacen las preguntas adecuadas. A continuacion. La relacion se conoce como el predicado y los objetos como los argumentos. solo tienes que dar las bases para que Prolog lo resuelva. sin entrar en detalle en ninguno de ellos.). Los siguientes puntos son importantes:   Los nombres de las relaciones deben comenzar con una letra minuscula. Su sintaxis en PCD-Prolog es relacion (objeto. Antes de comenzar es conveniente hacer una recomendacion. El lenguaje Prolog es diferente a cualquier otro lenguaje de bajo o alto nivel que conozcas. nunca intentes resolver un problema en otro lenguaje para luego traducirlo a Prolog. En esta primera practica se van a presentar los aspectos fundamentales de Prolog. .. Prolog buscara las respuestas y las presentara en la pantalla. 1. El objetivo es que tengas un primer contacto con Prolog.nen el problema a resolver. Los objetos se escriben separados por comas y encerrados entre parentesis. por tanto. No tienes que buscar un algoritmo que resuelva tu problema. objeto. 5 . con su entorno y que realices los primeros programas.2 Los hechos Un hecho es una relacion entre objetos.

 Al .

Una regla consiste en una cabeza y un cuerpo. objetivo n..27).. Los objetivos van separados por comas. Su sintaxis es cabeza :. Por ejemplo.3 Las reglas Cuando la verdad de un hecho depende de la verdad de otro hecho o de un grupo de hechos se usa una regla. especi. objetivo 2. 1.. un hecho es persona(juan. El cuerpo puede estar formado por varios hechos u objetivos.nal del hecho debe de ir un punto. .objetivo 1.

cando conjuncion y al .

1. Los nombres de las variables deben comenzar con letra mayuscula o con el caracter ( ).E).E>18.nal debe de ir un punto. una regla es mayor de edad(X):-persona(X. Existe una variable especial. 1.4 Las variables Las variables se utilizan para describir hechos y reglas generales. la variable anonima o blanca. Si son dominios prede. Por ejemplo. Esta variable se utiliza de la misma manera que las demas variables pero nunca toma ningun valor.5 La estructura de un programa en PDC-PROLOG La mayora de los programas en PDC-Prolog estan organizados en cuatro secciones principales:     domains predicates goal clauses En la seccion domains se declaran los argumentos que utilizan los predicados.

nidos no es necesario declararlos. 6 .

En predicates se declaran todos los predicados no prede.

Escribe el programa anterior corregido.6. vegetal(helecho). 4. Sin utilizar el ordenador descubre y explica los errores que hay en el siguiente programa escrito en PROLOG: domains cosa == symbol predicates animal(cosa) vegetal(cosa).6 Ejercicios propuestos 1. es frecuente ejecutar un programa y luego esperar a que se nos pregunte el objetivo. observa el mensaje goal y pregunta los siguientes objetivos: (i) (ii) (iii) (iv) (v) >El murcielago es animal? >El murcielago es vegetal? >El murcielago es vegetal y animal? >El murcielago es vegetal o animal? Escribe todos los animales. animal(iguana). buscara la solucion deseada tan pronto como se ejecute el programa. computadora(ibm pc). La seccion goal nos permite ejecutar los programas de una forma no interactiva. Cuando ejecutes el programa. vegetal(secoya). veras aparecer la ventana de dialogo. Introduce en el programa la siguiente seccion y observa el resultado 7 . Los hechos y las reglas se escriben en la seccion clauses.nidos que se utilizaran en la seccion clauses. 3. clauses animal(vaca). y por tanto. 1. animal(murcielago). computadora(apple macintosh) 2.1 >Vegetal o animal? 1. Como nuestro Prolog puede usarse de forma interactiva.

mujer.3 Una agencia matrimonial Una agencia matrimonial tiene un . 1. escribe reglas que expresen las siguientes relaciones: (i) ser abuela de(X.6.Y) (iii) ser hermano de(X.Y) (ii) ser nieto de(X.2 Parentescos Utilizando los predicados varon. madre y progenitor.write(X).goal animal(X).Y) Plasma lo anterior en un programa PROLOG y ejecutalo varias veces para comprobar que es correcto. padre. 1.Y) (iv) ser sobrina de(X.6.

chero de candidatos al matrimonio organizado segun las declaraciones siguientes: hombre(N. pelirrojo.C. jazz). adulta.A. baja). ciencia .S) indica que a la persona N le gusta el genero de musica M (clasica.E) mujer(N.M.A. C el color de su cabello (rubio. A su altura (alta. pop. gusta(N. el genero de literatura L (aventura. media.E) donde N es el nombre de un hombre o una mujer. negro) y E su edad (joven.L. casta~no.C. madura).

E) expresa que la persona N busca una pareja de altura A. literatura y deporte coinciden.C.ccion. Se considera que dos personas X e Y de sexos diferentes son adecuadas si X conviene a Y e Y conviene a X. policaca ). Se dice que X conviene a Y. si X conviene fsicamente a Y (la altura. los gustos de X e Y en musica.A. busca(N. y practica el deporte S (tenis. edad. y cabello de X son las que busca Y). jogging). natacion. 8 . con cabello de color C y edad E. y si ademas.

(i) Escribe un conjunto de declaraciones que representen el .

(ii) Escribe las reglas: conviene .chero de candidatos.

hostal o camping. Londres o Tunez. El catalogo de la agencia contiene. para cada destino. el precio del transporte (con independencia de la duracion) y el precio de una semana de estancia que vara segun el destino y el nivel de comodidad elegidos: hotel.s.p. 1. (ii) Expresa la relacion viaje(c.6.h.h.4 Una agencia de viajes Una agencia de viajes propone a sus clientes viajes de una o dos semanas a Roma. 9 .Y) tiene igual gusto(X.s.p max) que expresa que el coste p es menor que p max pesetas.p) que se interpreta como: el viaje a la ciudad c durante s semanas con estancia en h cuesta p pesetas.sicamente(X. (iii) Completa con viaje econ omico(c. (i) Escribe el conjunto de declaraciones que describen este catalogo (los precios se dejan a tu eleccion).Y) (iii) Haz deducir al programa que parejas son adecuadas.

Se utiliza la palabra instanciar porque la asignacion de un valor a una variable es temporal. Prolog solo vincula valores a las variables mientras se esta cumpliendo el objetivo. 2.2 La aritm etica en PROLOG 2. N 1 debe estar siempre instanciada a un valor ya que es parte de una expresion a evaluar.1 Variable instanciada Se dice que una variable esta instanciada si ha adquirido un valor. si este falla la variable es desvinculada de ese valor. Si N no esta instanciada el predicado igual se cumplira vinculando a N el valor de la expresion de N1 2. El valor de una expresion puede ser calculada si todas las variables estan instanciadas en el momento de su evaluacion. En Prolog expresiones como N = N 1 2 indican relaciones entre objetos.2 El predicado igual El predicado de igualdad esta prede.

en el momento en que una de ellas quede instanciada a un termino. Si dos variables quedan compartidas. y las dos variables quedan compartidas. Dos estructuras son iguales si tienen el mismo nombre y el mismo numero de argumentos. entonces X e Y son iguales. Como ya se ha indicado.  Si X e Y son variables no instanciadas. X quedara instanciada a lo que valga Y. Cuando se intenta satisfacer el objetivo Goal: X=Y Prolog intenta hacer coincidir X e Y. una caracterstica importante en Prolog y que lo diferencia de otros lenguajes de programacion. Hay dos predicados prede. el objetivo se satisface. es que una variable solo puede tener un valor mientras se cumple el objetivo. la otra queda automaticamente instanciada al mismo termino.nido. y el objetivo se satisface si ambas coinciden.   Las constantes son siempre iguales a s mismas. Ademas. Las reglas para decidir si X e Y son iguales son las siguientes:  Si X es una variable no instanciada e Y esta instanciada a un valor. y todos y cada uno de los correspondientes argumentos son iguales.

nidos que permiten determinar si una variable esta instanciada o no. Son los predicados free y bound. 10 .

b). bound(X): Este predicado se cumple si la variable X esta instanciada a algun valor. 2.1 Sobre el predicado igual 1. 2. (f) fun(X.c)).2 Los numeros naturales Escribe un predicado nat(X) que sea capaz de generar los numeros natu- rales.c)) = fun(Z.3 cumple si la variable X no esta instanciada a ningun Ejercicios propuestos 2.3. unix = Sun.  free(X): Se valor. M. Completa la siguiente tabla. Ordenador = macintosh. (b) Ordenador = sun.  Var3 no esta instanciada.. (d) Ordenador = sun. = luis Var1 Var2 Var3 luis Var1 Var2 Var3 si luis 2. (c) Ordenador = sun. (e) fun(X.. Debe actuar de la siguiente forma: goal: nat(6) yes goal: nat(X) 12345678. suponiendo que:  Var1 ha sido instanciada a juan.M) que genere los numeros naturales mayores que uno dado. Ordenador = Macintosh.  Var2 ha sido instanciada a pepe.3.X) = fun(a.a(Z.a(b. Escribe un predicado mayorque(N. Indica si los siguientes objetivos se cumplen y escribe los valores que toman las variables: (a) Ordenador = sun. 11 . escribiendo los resultados que dara cada expresion.

Y. 2.Y.Y.3.M). Ejecuta suma(2.Z) >Que sucedera si preguntaramos suma(X. que sea capaz de calcular dados X e Y su mnimo comun multiplo M y ademas conteste si/no en el caso de que X. 2. Completa el programa para que resuelva suma(X.3.Y.8).Y.8)? Escribe un programa para que resuelva este problema y sepa responder al objetivo suma(5.6 Las races de una ecuacion de segundo grado Dada la ecuacion sus races.5 El mnimo comun multiplo Escribe un predicado mcm(X.Y. de tal forma que Z sea el maximo de X e Y. de manera que Z es la suma de X e Y.3.3.Z). Y  0.4 El predicado maximo Escribe el predicado maximo(X.M vengan instanciados. con X.Z). 2 ax + bx + c = 0 haz un programa en prolog que calcule Nota: Prolog tiene un predicado prede.3.3.3 El predicado suma Escribe el predicado suma(X.8).2. donde la variable Z puede estar instanciada o no.3. 2.8) suma(2.

sqrt(real) que calcula la raz de un numero real.7 El factorial Escribe un predicado fac(N.nido. 2.3.F) que signi.

F. es decir. Escribe un factorial universal que cubra todos los casos anteriores. (c) Ambas variables vienen sin instanciar y debe de generar todos los pares N. que actue correctamente ante toda entrada.que que F es el factorial del numero natural N para los siguientes casos: (a) Dado un numero natural N. que sea capaz de generar el factorial F. (b) N y F vienen instanciados y debe contestar si/no. 12 .

Esta pregunta contiene una conjuncion de objetivos que se deben satisfacer. Este proceso consiste en intentar satisfacer los objetivos buscando una forma alternativa de hacerlo. mientras que una regla solo puede reducir la tarea a la de satisfacer una conjuncion de subobjetivos. REDO: Cuando se inicia el proceso de backtracking. En nuestro prolog. El predicado corte y el predicado fail El corte es un predicado prede. La traza hace que el entorno pare el programa despues de cada paso y diga en la ventana Trace lo que ha hecho. Un hecho puede hacer que un objetivo se cumpla inmediatamente. se puede seguir el proceso de backtracking paso a paso. se iniciara un proceso de backtracking. donde esta y cuales son los valores de las variables.2 CALL: Cuando intenta satisfacer un predicado.3 El proceso de Backtracking 3. Prolog responde a una pregunta hecha por el programador. Si no se puede satisfacer un objetivo. En esta ventana aparece uno de los siguientes mensajes:     3. Basta con escribir la palabra trace al inicio del programa y pulsar la tecla F10 para realizar el siguiente paso.1 Backtracking En esta practica se examina en detalle como Prolog busca todas las soluciones a un objetivo. RETURN: Cuando un predicado se satisface. FAIL: Cuando un predicado no se satisface.

El predicado fail es tambien un predicado prede. Su utilizacion puede ser muy importante para que el programa funcione mas deprisa y no malgaste memoria y tiempo en intentar satisfacer objetivos que podemos decir de antemano que nunca contribuiran a una solucion. Como objetivo se cumple inmediatamente pero no puede satisfacerse de nuevo. Se escribe con el signo de exclamacion \!" y se utiliza para impedir que se inicie el proceso de backtracking.nido y sin argumentos.

nido. 13 . lo que provoca que se desencadene inmediatamente el proceso de backtracking. sin argumentos y siempre fracasa como objetivo.

Ejecuta con una traza a(X).M):.1 Sobre el predicado corte 1. b(X):. g(2). ). a(3) y a(4). 2. p( .b(X).X=4.Y=X-1.M). b(X):. Dado el programa: hola(3):.M1). hola(X):. !.M):. v(X). nat(N. f(5). write(N). nl.M1=M-1.nat(N.1):. p(N. 14 . es decir.3. v(X). para decir que se ha fallado y que no busque mas soluciones.3 Ejercicios propuestos 3.N). nat(N. hola(6). write(Y). a(X):. g(1). Dado el siguiente programa: nat(0.!. fail. Contesta a los siguientes objetivos sin ejecutar el programa: (a) hola(4) (b) hola(9) (c) hola(2+1) Comprueba si tus respuestas son correctas realizando una traza del programa.g(X). v(X).Los predicados corte y fail se combinan para indicar situaciones erroneas. nat(N. y analiza si el resultado obtenido esta en contradiccion con el que sale al ejecutar los objetivos a(2). hola(Y). >Cual sera la respuesta si quitasemos el corte que aparece en la tercera lnea? 3. 3. g(3).!.f(X). Considera el siguiente programa: a(X):.

(d) p(N.0). (a) p(0. 3.0).2 La funcion de D'Ackerman Construye un predicado que de. (e) p(N. (b) p(1.0).1).Contesta a los siguientes objetivos sin ejecutar el programa. (c) p(0.3). y comprueba si tus respuestas son correctas realizando una traza del programa.3.

3]. pertenece(X.[2. [ j L1 ]. L1.3] Goal: inter([2.2.[2. inter( [ ]. L2).3 El predicado interseccion Se considera el siguiente programa: pertenece(X. ). [X j ]). m < 0.na la funcion de D'Ackerman que viene dada por: 8 > < > : (0.3. L2) :. [ ]. m > 0 A(m. [ j Y ]):. n 1)) no existe solucion. inter(Y. L2).3] 1. Se desea que el predicado inter funcione de la manera siguiente: Goal: inter(X.pertenece(X. n) = n + 1. n  0 ( 0) = A(m 1.Y). 15 . m.[1. [X j L1]. L2). L2):. Usa la traza para saber por que el resultado obtenido por el programa no es el deseado. n) = A(m 1. inter( [X j Y]. n > 0 3. A~nade un corte en el lugar adecuado para solventar el problema.3.inter(Y.5]) X=[2.pertenece(X. 2.3.X.4.5]) X=[2. 1). A(m. n < 0: A A m.4. L1.3]. inter(Y.

10).3. jugador(luis. Usa el corte para asegurar que \juan contra luis" y \luis contra juan" no sean escritos ambos en la pantalla. 16 .9).9). jugador(pedro.4 Campeonato de tenis Se tiene una base de datos de los jugadores de tenis de un club con el nombre y la edad de cada uno de ellos dados de la siguiente forma: jugador(juan. Escribe en Prolog un programa que calcule todos los posibles partidos entre los jugadores de la misma edad.3.

4. 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. Las listas se manipulan dividiendolas en una cabeza y una cola. es realmente un objeto compuesto recursivo. una lista es un objeto que contiene un numero arbitrario de otros objetos. llamados elementos de la lista. incluso pueden ser a su vez listas. Los elementos de una lista pueden ser de cualquier tipo de dato. 2. 5] La lista que no contiene ningun elemento es la lista vaca: [ ]. 3. Una lista.1 Listas La lista es una manera facil de trabajar en situaciones donde es difcil o imposible predecir el numero de datos a ser guardados o manipulados. He aqu un ejemplo de una lista de enteros: [1.4 Listas y recursi on 4. Como una variable que no este instanciada se puede uni. En prolog.

predicado(C ola): 2. 4. El esquema general de todos los predicados que tienen como criterio de terminacion la lista vaca es: predicado([ ]) : procesar ([ ]): predicado([C abezajC ola]) : procesar (C abeza). una recursiva y un criterio de terminacion. Esta forma de trabajar utiliza dos reglas. Cuando un elemento en concreto es encontrado. Cuando la lista es vaca. Esto se escribe [X jY ].car con cualquier objeto. Una expresion con esta forma instanciara X a la cabeza de una lista e Y a la cola de la lista. El esquema general es: 17 . existe una notacion especial en Prolog para representar la lista con cabeza X y cola Y . tambien lo puede hacer con una lista. Existen tres criterios de terminacion muy importantes: 1.2 Predicados con listas La forma de trabajar con listas consiste en tomar la cabeza de la lista y luego hacer la misma operacion con la cola de la lista. Debido a que una operacion comun con las listas es separarla en su cabeza y su cola.

[E lementoj ]) : procesar(E lemento): predicado(P. C ola): predicado ( ) procesar (C abeza). E lemento. E lemento. C ola): predicado 4. [E lementoj ]) : predicado(E lemento.3.1 Algunos predicados sobre listas Se de.([E lemento. predicado(P 1. El esquema general es: ([1. E lemento. [ jC ola]) : P1 = P 1.3 Ejercicios propuestos 4. Cuando una posici on en conreto es encontrada. [C abezajC ola]) : predicado(E lemento. procesar E lemento : 3.

3.2 Predicados elementales sobre listas Escribe los siguientes predicados: 1. [Y j L1]. [X ] ): p2( X.Lista2) Lista2 es el resultado de borrar el elemento X en todas las apariciones en Lista. p4(X. L2.Lista. 18 . [ j T ]) : 4(X. p5(X. borra(X. L2. p2( X. [Y j L2]) : p 5(X. p3(X. Sin utilizar el ordenador comenta brevemente que hace cada uno de ellos: 1. L ). L3 ). [X j ]): p4(X. mismo conjunto(Lista1.3. p1( [ ]. [ j T ]) : p3(X. Y. 4. Y. L. 2. p 2( X. [X j T ]. [X 2.nen cinco predicados Prolog para tratamiento de listas. p3( X. [ j T ]) : j L 3] ) : 1( L1. p1( [X j L1]. T ): p 5.Lista2) Es cierto si las dos listas tienen el mismo conjunto de elementos. Y j ]). [X. L2). elemento par(X. T ): p5(X.Lista) Es cierto si X ocupa una posicion par en la lista. T ): 4. T ). p 3. Y. L1.

inverso(Lista1. 5.Lista2) Cierto si Lista1 es sublista de Lista2.Lista2) Dada Lista1. 7.Lista2) Lista2 es el resultado de borrar Sublista de Lista1. borra cadena(Sublista. 6.Lista1.Lista2) Devuelve en Lista2 los mismos elementos de L1 pero en orden inverso. subconjunto(Lista1. sublista(Lista1.4. 19 . devuelve en Lista2 todos los posibles subconjuntos que se pueden formar con los elementos de Lista1.

acertijos y juegos de menor a mayor di.1 Acertijos y juegos Ejercicios A continuacion se enuncian ejercicios.5 5.

1 pescalar(L1.L2.1.1. Los dos vectores vienen dados por las dos listas de enteros L1 y L2. 5.P) P es el producto escalar de los vectores L1 y L2. El predicado debe fallar si los dos vectores tienen una longitud distinta.1.cultad.2 sumadelosdemas(L) Dada una lista de enteros L. 5. 5. se satisface si existe algun elemento en L que es igual a la suma de los demas elementos de L y falla en caso contrario.3 trescopias(L) De.

1.2].1] y [2. P y N inicialmente estaran instanciados.3]. (Notar que la longitud de L es N.1.7 permuta(L. La lista L inicialmente estara instanciada y P no. Las demas soluciones son: [3.4].1. 5.ne un predicado que determine si una lista es una concatenacion de tres copias de la misma sublista. 5.N.1. una solucion sera [1. Por ejemplo. si P es 5 y N es 2. 20 .6 dados(P.5 numerodeveces(L) Escribe un predicado que nos indique todos los elementos de una lista y el numero de veces que aparece repetido cada uno de ellos.L) La lista L expresa una manera de sumar P puntos lanzando N dados.[4. El predicado debe ser capaz de generar todas las soluciones posibles.4 capicua(L) Construye un predicado que determine si una lista es capicua. 5.P) La lista P contiene una permutacion de los elementos de la lista L. 5.

L2) Dada una lista de enteros L1.1.9 burbuja(L1.1.8 merge(L1.1.5. 5. mientras sea posible. (Este metodo consiste en intercambiar. mediante el proceso de merge o fusion: cada vez se a~nade a L3 un elemento de L1 o L2. pares de elementos contiguos que esten mal ordenados entre s.10 domino(L) Se da una lista de . L3 es la lista que contiene los elementos de L1 y L2 ordenados de menor a mayor.L2. la lista L2 contiene los mismos enteros ordenados de menor a mayor por el metodo de ordenacion de la burbuja. 5. segun convenga.L3) Dados L1 y L2 (listas de enteros de menor a mayor).

chas de domino. Se trata de jugar de la manera usual: 1. cada una de ellas representada por una lista de pares de numeros. Una .

cha de domino se puede a~nadir a cualquiera de los dos .

nales de la serie formada. 2. Las caras de contacto deben llevar el mismo numero. Comenzando con una .

construye una sucesion que las contenga todas.11 Grupos de personas Se dispone de una base de datos prolog que contiene predicados de la forma persona(nombre.1. 21 . que es otro numero entero. 5. restar y multiplicar algunos numeros de la lista L. Se puede usar cada numero tantas veces como aparezca en la lista L. 5. El problema consiste en hacer un programa prolog que.edad). a partir de esta base de datos. nos genere todos los grupos de personas tales que la diferencia de edad maxima entre dos de sus componentes sea menor que 10 a~nos.1.cha de domino arbitraria entre las dadas.12 El juego de las cifras El jugador dispone de una lista L de numeros enteros y un objetivo N. El jugador debe encontrar una manera de obtener el objetivo N a base de sumar.

nos devuelva en E una estructura obtenida mediante el encadenamiento.7]. Para ello se pide lo siguiente: 1. algunas soluciones seran: 4  (100 7) + 8 ((100 9) + 4)  4 4  (9 + 100) 7  8 7  (8  (9 4)) + 100.100. 2. 3. de TODOS los numeros de S con los operadores +. 4. la estruc- tura es ese elemento. y si tiene mas de uno. sin cambiar el orden de los numeros. Escribe un predicado juego(L. obtenga un subconjunto S de L (sin cambiar el orden de los elementos). bajo backtracking deben ser capaces de generar todos los subconjuntos y permutaciones posibles.P) que.S) que. Escribe un predicado obtenible(L. genere estructuras E obtenibles con L. obtenga una permutacion P de L. dada una lista S de numeros enteros. entonces la estructura es una operacion aplicada a dos estructuras (obtenidas con una primera parte de la lista y con una segunda). Por ejemplo.Por ejemplo. (resatisfacible: poder generarlas todas).9. dado un conjunto (una lista L). algunas estructuras obtenibles son: (3 + 8)  (5 + 7) 3 + (8 5)  7 ((3  8) + 5) 7 etc: Ayuda: Basta con saber que si la lista tiene un elemento. Escribe un predicado perm(L. con la lista [3. etc: Lo que queremos es escribir un programa prolog que obtenga el objetivo.7. Ambos predicados deben ser \resatisfacibles".8. 22 .8.4] y el objetivo N es 380.E) que. es decir. y .5. Escribe un predicado subset(L.N) que genere todas las soluciones posibles. Haz un predicado est(S. cuando la lista L es [4. usando los resultados de los apartados 1) y 2). dada una lista L.E) que.

5.1. Un cliente compra 4200 pesetas de cada uno.16 Las torres de Hanoi En el gran templo de Benares." Se debe gastar las 100 pesetas juntas. >Que barril queda y cuanto vale un galon de aceite? 5.1. quiero que me des algunos sellos de 1 peseta.14 N turistas en 3 habitaciones En un hotel hay 3 habitaciones numeradas del 1 al 3. 5. dejando solo un barril.13 El estanco Un cliente dice al empleado de un estanco: \Tengo 100 pesetas.1. En cada una de ellas hay cuatro camas. debajo de la cupula que marca el centro del mundo.1. esta colocada una placa de bronce.15 Un acertijo con aceite y vinagre Cada uno de los barriles en la ilustracion adjunta contiene aceite o vinagre. El problema consiste en hacer un programa prolog que nos permita obtener todas las maneras posibles de distribuir N turistas en las tres habitaciones. sobre la cual estan .5. Haz un programa prolog que resuelva el problema. el doble de esa cantidad de sellos de 2 pesetas y todo lo que quede en sellos de 5 pesetas. El galon de aceite cuesta el doble que el de vinagre.

jadas 23 .

Esto constituye la torre de Brahma. Dios coloco sesenta y cuatro discos de oro puro. En una de estas agujas. incesantemente. Da y noche. cuando se creo el mundo. descansan sobre el. los sacerdotes traspasan los discos de una de las agujas de diamante a la otra. de acuerdo a las leyes . el mayor de los cuales se apoya sobre la placa de bronce y los demas. cada una de las cuales tiene un codo de altura y su espesor es como el cuerpo de una abeja. por orden de tama~no decreciente.tres agujas de diamante.

el mundo desaparecera. a una de las otras dos agujas. y en medio de un fragoroso trueno. 5.17 El acertijo del lechero El honesto John dice: \Lo que ignoro acerca de la leche no vale la pena mencionarse". por igual. Estas exigen que mientras realiza su tarea. ambos llenos de leche. se desmenuzaran en polvo. templo y brahmanes. no debe mover mas de un disco por vez y que lo debe colocar en una aguja de modo que no quede debajo de el ningun disco de menor diametro. de la aguja donde Dios los coloco en la creacion.1. Cada galon equivale a cuatro cuartos. pero se quedo atonito un da cuando dos damas le pidieron dos cuartos de leche cada una. >Como hizo para medir exactamente dos cuartos de leche? 24 .jas e inmutables de Brahma. Cuando los sesenta y cuatro discos hayan sido traspasados de esta manera. torre. John solo dispona de dos tarros de diez galones. Una de ellas tena un recipiente de cinco cuartos y la otra uno de cuatro cuartos.

arista(e.N) que se satisface si hay camino de longitud N entre los vertices V1 y V2.d. 25 .50). Los siguientes predicados deben terminar siempre y deben funcionar para todo grafo representado de esta manera. arista(d.b. arista(a. y falla en caso contrario.c. 3. Se tiene la siguiente representacion del grafo en la base de datos de Prolog: vertices([a. Todos los argumentos vienen instanciados. Los argumentos V1.C.1.50). 2. Ayuda: usa el apartado anterior y el predicado nat max. arista(c. arista(b. y falla en caso contrario. Escribe un predicado camino(V1. Escribe un predicado hay camino(V1.30). V2 y T vienen instanciados y C es el camino que hay que encontrar. y falla en caso contrario.T) que se satisface si hay camino C de coste total T entre los vertices V1 y V2.b. Ayuda: adapta el primer apartado.e]) arista(a.a.e. Escribe un predicado camino coste(V1.d.b.20).d.V2.c.18 Problema del grafo Sea el grafo Terminologa usada: hay un camino entre los vertices \a" y \d" representado por la lista [a. Su longitud es 3 y su coste es de 60. Los dos argumentos vienen instanciados.b. Ten en cuenta las ayudas y que hay que hacer todos los predicados usados.10).50).d].V2.70).c. arista(c.V2) que se satisface si hay camino entre los vertices V1 y V2. 1.5.

V2) que escriba el camino de coste mnimo entre los vertices V1 y V2. Ejemplo: ?.4. Los dos argumentos vienen instanciados. camino: coste: [a.1. Si hay mas de un camino mnimo.c. con su coste.d). Ayuda: usa los apartados 2) y 3) y el predicado nat(N).19 Las 9 casillas Sea un tablero de nueve casillas tal como se muestra en la . Construye un predicado camino minimo(V1.b.d] 60 yes ?- 5.camino minimo(a. Este predicado debe fallar si no hay camino. entonces se da uno cualquiera de ellos.

Los caballos se mueven segun las reglas del ajedrez. El problema consiste en pasar de la posicion 1 a la posicion 2 teniendo en cuenta que: 1. Las Bs y la Ns representan caballos de ajedrez blancos y negros respectivamente.gura. (En la .

3. 2. 26 . En ningun momento puede haber dos caballos en la misma casilla.gura hay punteado un ejemplo de movimiento correcto). Los caballos pueden ser movidos en cualquier orden. 4. Todos los caballos han de estar en todo momento dentro del tablero.

1.20 Duros y pesetas Sea un tablero de 51 casillas. en el cual se encuentran cuatro monedas (dos duros y dos pesetas) dispuestas de la manera que se muestra en la .5.

las pesetas deben quedar a la derecha y los duros a la izquierda. Nos quedamos sin dinero antes de que pudieramos ganar y notamos que nadie all estaba fumando Maggie Cline. 3. Haba diez mu~nequitos que uno deba voltear con pelotas de beisbol. Sume los numeros de todos los mu~necos que voltee y cuando la cifra llegue exactamente a 50. Los duros solo pueden ser movidos hacia la izquierda.21 Pim{Pam{Pum Un amigo y yo estabamos dando un paseo por los juegos de Coney Island el otro da cuando llegamos hasta uno que. a un centavo cada uno y puede hacerlos desde tan cerca como lo desee. Las reglas para efectuar los movimientos son las siguientes: 1. segun nos dijo el hombre. ganara usted un cigarro Maggie Cline.gura. ni mas ni menos. El problema consiste en encontrar una secuencia de movimientos que intercambie las posiciones de las monedas. Las pesetas solo pueden ser movidas hacia la derecha. 5. de 25 centavos. era el juego mas honesto de la playa. El hombre dijo: \Tiene usted tantos tiros como quiera. 27 . con una banda dorada alrededor".1. Los movimientos permitidos son deslizar y saltar. 2.

5.22 Las nueve monedas Tenemos nueve monedas dispuestas de la manera que muestra el dibujo. 28 .Indica de que modo hubieramos podido hacer exactamente 50 puntos. Escribe un programa Prolog que resuelva el solitario. Una moneda se puede eliminar haciendo que salte por encima de ella otra moneda que se encuentre en una posicion contigua. un movimiento valido a partir de la posicion inicial consistira en hacer saltar la moneda A por encima de la B hasta la posicion vaca y retirar la moneda B. El objetivo del solitario consiste en eliminar todas las monedas menos una. siempre que \caiga" en una posicion vaca y no se salga del triangulo que forman las monedas al comenzar la partida. Por ejemplo.1.

presto a demostrar su pericia disparandole a las manzanas que sostiene Tommy Riddles. Indica a que manzanas acerto para lograr exactamente 100.1. suponiendo que se puede disparar a la misma manzana tantas veces como se quiera.5.1. 29 .23 En el pas de los acertijos La ilustracion muestra a Guillermo Tell a treinta y cinco yardas del poste.24 Un acertijo de arquera Indica cuantas echas hacen falta para hacer justo cien puntos en este blanco. 5.

mesa. y recuerdo que todos empatamos con la misma puntuacion.1.1. Indica los seis tiros que hizo cada participante.5.25 Tiro al pavo He aqu un juego de tiro al blanco en el que participe cierta vez. librera y escritorio. 5. Cada uno disparo seis tiros y marco setenta y un puntos. Estos muebles son tan grandes 30 . sofa. El premio era un pavo gordo. Tienen cinco muebles de gran tama~no: CAMA.26 El acertijo de la mudanza La ilustracion muestra una pareja que acaba de mudarse a un simpatico apartamento de seis habitaciones.

Lo que ha ocurrido sin embargo.que dos de ellos no caben al mismo tiempo en ninguno de los cuartos. es que los de la compa~na de mudanzas han colocado la librera y la cama en cuartos equivocados. El hombre y su esposa han tratado de imaginar durante varias horas un plan e.

1. Cuando una canasta baja.ciente para intercambiar esos muebles de lugar. El sistema fue adoptado en un hotel. un objeto mas pesado puede ser bajado en la otra canasta. La botella de whisky representa la cama y el cepillo es la librera. Nada que pese mas de treinta libras puede ser bajado 31 . Colocando un objeto en una de las canastas para que actue de contrapeso. Se pide que intercambies de lugar estos dos muebles. El dibujo muestra un ascensor Binks situado ante la ventana de un moderno hotel veraniego.27 El acertijo del salvamento del fuego El metodo de Binks de salvamento contra incendios es simplemente una soga que pasa por una polea y tiene en cada extremo una gran canasta. para representar as los muebles que deben ser cambiados de lugar. pero los huespedes lo utilizaron para escapar durante la noche sin pagar. moviendo un objeto por vez al cuarto vaco adyacente. la otra sube. El inventor dice que su aparato debe ser colgado afuera de todos los dormitorios del mundo. Como el hombre es sistematico. 5. por lo que el mecanismo no siguio contando con la aprobacion de los hosteleros. ha hecho un diagrama de su apartamento y luego ha colocado cinco objetos peque~nos dentro de los cuadrados.

Una noche se produjo un incendio en el hotel. y todos los huespedes llegaron a escapar excepto el vigilante nocturno y su familia. indica cual es la manera mas e. No pudieron ser despertados hasta que todas las vas de escape. el perro y el bebe). su esposa. El vigilante pesaba 90 libras. estuvieron cerradas. y treinta libras es el lmite de seguridad de la diferencia que puede existir entre ambas canastas cuando las dos llevan un peso. el perro 60 libras y el bebe 30 libras. su esposa 210 libras. Si se supone que ni el perro ni el bebe son capaces de entrar o salir de la canasta sin la ayuda del hombre o de su esposa. pero no pueden usarse pesos en las canastas (solo el hombre. excepto el ascensor Binks.con seguridad en una canasta mientras la otra esta vaca. Cada canasta tiene capacidad para los cuatro.

Empezando por la ni~na sin sombrero de la parte superior y contando en el sentido de 32 . pero Tommy Muttonhead alego que como estaban juntos.ciente de que los cuatro bajen a salvo. de modo que penso que sera bueno que todos se acomodaran en un crculo y que se diera un penique a los primeros cinco ni~nos que fueran descartados del conteo.1. 5. hallaron cinco peniques. La ilustracion muestra donde puso Tommy a las cinco ni~nas. el \hallazgo" perteneca al grupo. Conoca el acertijo de los turcos y los cristianos.28 Descarte a los varones Un da sucedio que diez ni~nos (cinco varones y cinco ni~nas) que volvan de la escuela. Una ni~nita fue quien hallo el dinero.

de manera que resulto que las chicas se quedaron con el dinero y todos los chicos se enojaron con Tom. pero olvido que el mismo haba dispuesto que recibieran el penique los que eran descartados. tal como lo muestra la ilustracion. Segun la leyenda. y no a las ni~nas. albergaba el doble de ocupantes que el primer piso. 5. Se ve claramente que hay ocho cuartos en cada uno de los pisos superiores. para descartar a los cinco varones.las agujas del reloj. La Madre Superiora. deba haber exactamente once monjas en las seis habitaciones de cada uno de los cuatro lados del convento. de acuerdo con la vieja regla de los fundadores. insista en que las hermanas deban dividirse de manera que se ocupasen todas las habitaciones. era una estructura cuadrada de tres pisos. con seis ventanas en cada lado de los pisos superiores. Tambien debera determinarse el lugar inicial del conteo. El problema consiste en determinar cual es el menor numero que Tommy debera haber utilizado en lugar de trece.1. Por supuesto. El plan de Tommy era que los cinco varones consiguieran un penique cada uno. El ultimo piso. los pisos superiores eran utilizados como dormitorios. El problema se re. el numero trece siempre sera una ni~na. en cuanto una de las ni~nas es descartada debe abandonar el crculo para no ser incluida en el conteo siguiente.29 El problema del convento El convento. que tena camas en cada una de las habitaciones.

de las 33 . ocurrio que tras la retirada del ejercito frances a traves del paso de los Pirineos. se descubrio que haban desaparecido nueve monjas. de modo que no es necesario que se considere la planta baja.ere tan solo a los dos pisos superiores. Bien.

siempre que aterrice en otro cuadrado vaco. las monjas que advirtieron la desaparicion se las arreglaron para ocultar el hecho por medio de una inteligente manipulacion o cambio de las ocupantes de las habitaciones.30 Antes y despues Existe un bonito acertijo. Cada pieza puede ser movida de un cuadrado al adyacente. Siempre se creyo que haban sido capturadas por los soldados. o especie de solitario. el doble en el ultimo piso que en el primero. para no preocupar a la Madre Superiora.mas jovenes y atractivas. As. Sin embargo. El juego llego a Londres. 5. Indica cuantas monjas haba y como se dispusieron. que se hizo muy popular en Europa. donde gozo de gran popularidad con el nombre de Acertijo Ingles de las Dieciseis. y no obstante. que paso cuarenta a~nos de su vida en el Sailor's Snug Harbor. once monjas en cada uno de los lados del convento. ya que fue ideado por un marinero ingles. en Staten Island. las monjas lograron reacomodarse de tal modo que. Es un invento ingles. o pueda saltar por encima de una pieza adyacente (de cualquier color). hallaba todos los cuartos ocupados. pero nunca fue comercializado. Solo se permiten los movimientos dentro de la misma . faltaban nueve monjas. cuando la Madre Superiora haca sus rondas nocturnas.1. El objeto del juego es trasponer las posiciones de las piezas blancas y negras en el menor numero posible de movimientos. siempre que este ultimo este vaco.

la (como la torre en el ajedrez). 34 . nada de movimientos en diagonal como en las damas.

5.1. debajo de un farol. 35 . Se dice que hubo pilotos que encallaron sus barcos. El premio de 1000 dolares. y se cuentan ridculas historias acerca de comerciantes que dejaron de abrir sus comercios. El problema consista en desplazar los bloques. El rasgo misterioso del problema es que nadie pareca ser capaz de recordar la secuencia de movimientos mediante los cuales haba logrado resolverlo. hasta lograr nuevamente la posicion inicial pero corrigiendo el error del 14 y el 15. Resuelve el problema dejando un cuadrado vaco en la esquina superior izquierda en vez de en la esquina inferior derecha. Se sabe que los granjeros abandonaron sus cosechas. Los quince bloques estaban dispuestos dentro de la caja cuadrada en orden pero con el 14 y el 15 invertidos tal como se ve en la ilustracion. tratando de recordar de que manera habia resuelto el problema. y maquinistas que no detenan sus trenes en las estaciones. ofrecido a quien presentara la primera solucion correcta del problema.31 El rompecabezas 14-15 Los veteranos habitantes del Pas de los Acertijos recordaran que en la decada de 1870 enloqueca todo el mundo con una cajita de bloques moviles que hizo conocida bajo el nombre de \Rompecabezas 14-15". aunque miles de personas dicen haber llevado a cabo la proeza. La gente se transtorno con el rompecabezas. uno por vez. y uno de esos casos es el que eleg para la ilustracion. jamas ha sido otorgado. acerca de un distinguido clerigo que permanecio toda una noche de invierno en la calle.

F.A. Nuevos acertijos de Sam Loyd.Gardner. Programacin en PROLOG. 1988. [2] F.References [1] P. 1988.A. 1989. Mellish. [3] W. Los acertijos de Sam Loyd. [5] M.Gardner. Prolog. Coleccin Ciencia Informtica. Ediciones Juan Granica. S. Caneghem.Graw{Hill. S. 1993. H. 36 . Mc. Clocksin and C.S. Kanoui. Giannesini. Pasero and M. 1989. R. [4] M. Robinson. Aplique Turbo Prolog. Ediciones Juan Granica. Addison-Wesley.