ingenier - unizar.es

36

Upload: others

Post on 30-Jan-2022

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Ingenier - unizar.es

PR�ACTICAS DE PROLOG

L�ogica

Ingenier��a Inform�atica

Departamento de Matem�atica AplicadaUniversidad de Zaragoza

Francisco Jos�e Gaspar

Inmaculada G�omez

Natalia Boal

Page 2: Ingenier - unizar.es

Presentaci�on

El texto que aqu�� se presenta corresponde a la parte pr�actica de la asignaturade L�ogica en la titulaci�on de Ingenier��a Inform�atica. Esta asignatura tienecar�acter optativo y se viene impartiendo por el Departamento de MatemticaAplicada en el Centro Polit�ecnico Superior de la Universidad de Zaragoza.

No cabe duda que la realizaci�on de pr�acticas con ordenador en esta asig-natura es fundamental para el aprendizaje del lenguaje de programaci�onProlog.

En este cuadernillo se proporciona una colecci�on de ejercicios con la �-nalidad de que el alumno avance en el conocimiento del Prolog. El textose compone de cinco partes que corresponden de una forma natural a cadauna de las cinco sesiones pr�acticas que tiene la asignatura. Estas pr�acticasconstan de unos ejercicios de car�acter te�orico que sirven para a�anzar losconocimientos adquiridos en clase y de ejercicios espec���cos de progra-maci�on.

Se pretende que estas notas ayuden al alumno a conseguir un dominioen la programaci�on en Prolog, con el cual poder alcanzar objetivos m�asambiciosos.

Los autores

Page 3: Ingenier - unizar.es

Contents

1 Introducci�on al lenguaje PROLOG 51.1 Generalidades . . . . . . . . . . . . . . . . . . . . . . . . . . 51.2 Los hechos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.3 Las reglas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61.4 Las variables . . . . . . . . . . . . . . . . . . . . . . . . . . 61.5 La estructura de un programa en PDC-PROLOG . . . . . . 61.6 Ejercicios propuestos . . . . . . . . . . . . . . . . . . . . . . 7

1.6.1 >Vegetal o animal? . . . . . . . . . . . . . . . . . . . 71.6.2 Parentescos . . . . . . . . . . . . . . . . . . . . . . . 81.6.3 Una agencia matrimonial . . . . . . . . . . . . . . . . 81.6.4 Una agencia de viajes . . . . . . . . . . . . . . . . . . 9

2 La aritm�etica en PROLOG 102.1 Variable instanciada . . . . . . . . . . . . . . . . . . . . . . 102.2 El predicado igual . . . . . . . . . . . . . . . . . . . . . . . . 102.3 Ejercicios propuestos . . . . . . . . . . . . . . . . . . . . . . 11

2.3.1 Sobre el predicado igual . . . . . . . . . . . . . . . . 112.3.2 Los n�umeros naturales . . . . . . . . . . . . . . . . . 112.3.3 El predicado suma . . . . . . . . . . . . . . . . . . . 122.3.4 El predicado m�aximo . . . . . . . . . . . . . . . . . . 122.3.5 El m��nimo com�un m�ultiplo . . . . . . . . . . . . . . . 122.3.6 Las ra��ces de una ecuaci�on de segundo grado . . . . . 122.3.7 El factorial . . . . . . . . . . . . . . . . . . . . . . . 12

3 El proceso de Backtracking 133.1 Backtracking . . . . . . . . . . . . . . . . . . . . . . . . . . 133.2 El predicado corte y el predicado fail . . . . . . . . . . . . . 133.3 Ejercicios propuestos . . . . . . . . . . . . . . . . . . . . . . 14

3.3.1 Sobre el predicado corte . . . . . . . . . . . . . . . . 143.3.2 La funci�on de D'Ackerman . . . . . . . . . . . . . . . 153.3.3 El predicado intersecci�on . . . . . . . . . . . . . . . . 153.3.4 Campeonato de tenis . . . . . . . . . . . . . . . . . . 16

4 Listas y recursi�on 174.1 Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174.2 Predicados con listas . . . . . . . . . . . . . . . . . . . . . . 174.3 Ejercicios propuestos . . . . . . . . . . . . . . . . . . . . . . 18

4.3.1 Algunos predicados sobre listas . . . . . . . . . . . . 184.3.2 Predicados elementales sobre listas . . . . . . . . . . 18

Page 4: Ingenier - unizar.es

5 Acertijos y juegos 205.1 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

5.1.1 pescalar(L1,L2,P) . . . . . . . . . . . . . . . . . . . . 205.1.2 sumadelosdemas(L) . . . . . . . . . . . . . . . . . . . 205.1.3 trescopias(L) . . . . . . . . . . . . . . . . . . . . . . 205.1.4 capicua(L) . . . . . . . . . . . . . . . . . . . . . . . . 205.1.5 numerodeveces(L) . . . . . . . . . . . . . . . . . . . . 205.1.6 dados(P,N,L) . . . . . . . . . . . . . . . . . . . . . . 205.1.7 permuta(L,P) . . . . . . . . . . . . . . . . . . . . . . 205.1.8 merge(L1,L2,L3) . . . . . . . . . . . . . . . . . . . . 215.1.9 burbuja(L1,L2) . . . . . . . . . . . . . . . . . . . . . 215.1.10 domino(L) . . . . . . . . . . . . . . . . . . . . . . . . 215.1.11 Grupos de personas . . . . . . . . . . . . . . . . . . . 215.1.12 El juego de las cifras . . . . . . . . . . . . . . . . . . 215.1.13 El estanco . . . . . . . . . . . . . . . . . . . . . . . . 235.1.14 N turistas en 3 habitaciones . . . . . . . . . . . . . . 235.1.15 Un acertijo con aceite y vinagre . . . . . . . . . . . . 235.1.16 Las torres de Hanoi . . . . . . . . . . . . . . . . . . . 235.1.17 El acertijo del lechero . . . . . . . . . . . . . . . . . . 245.1.18 Problema del grafo . . . . . . . . . . . . . . . . . . . 255.1.19 Las 9 casillas . . . . . . . . . . . . . . . . . . . . . . 265.1.20 Duros y pesetas . . . . . . . . . . . . . . . . . . . . . 275.1.21 Pim{Pam{Pum . . . . . . . . . . . . . . . . . . . . . 275.1.22 Las nueve monedas . . . . . . . . . . . . . . . . . . . 285.1.23 En el pa��s de los acertijos . . . . . . . . . . . . . . . 295.1.24 Un acertijo de arquer��a . . . . . . . . . . . . . . . . . 295.1.25 Tiro al pavo . . . . . . . . . . . . . . . . . . . . . . . 305.1.26 El acertijo de la mudanza . . . . . . . . . . . . . . . 305.1.27 El acertijo del salvamento del fuego . . . . . . . . . . 315.1.28 Descarte a los varones . . . . . . . . . . . . . . . . . 325.1.29 El problema del convento . . . . . . . . . . . . . . . . 335.1.30 Antes y despu�es . . . . . . . . . . . . . . . . . . . . . 345.1.31 El rompecabezas 14-15 . . . . . . . . . . . . . . . . . 35

Page 5: Ingenier - unizar.es

1 Introducci�on al lenguaje PROLOG

1.1 Generalidades

Prolog es un lenguaje de programaci�on que se utiliza para resolver proble-mas en los que existen objetos y relaciones entre objetos. La programaci�onen Prolog consiste simplemente en:

� declarar hechos sobre los objetos y sus relaciones,

� de�nir reglas sobre dichos objetos y relaciones, y

� hacer preguntas.

Prolog es un lenguaje de programaci�on coloquial, lo cual quiere decir que elordenador y el programador sostienen una especie de conversaci�on. Prologesperar�a a que introduzcas los hechos y las reglas que de�nen el problemaa resolver. A continuaci�on, si se hacen las preguntas adecuadas, Prologbuscar�a las respuestas y las presentar�a en la pantalla.

En esta primera pr�actica se van a presentar los aspectos fundamentalesde Prolog, sin entrar en detalle en ninguno de ellos. El objetivo es quetengas un primer contacto con Prolog, con su entorno y que realices losprimeros programas.

Antes de comenzar es conveniente hacer una recomendaci�on. El lenguajeProlog es diferente a cualquier otro lenguaje de bajo o alto nivel que conoz-cas, por tanto, nunca intentes resolver un problema en otro lenguaje paraluego traducirlo a Prolog. No tienes que buscar un algoritmo que resuelvatu problema, s�olo tienes que dar las bases para que Prolog lo resuelva.

1.2 Los hechos

Un hecho es una relaci�on entre objetos. Su sintaxis en PCD-Prolog es

relacion (objeto, objeto, ...).

La relaci�on se conoce como el predicado y los objetos como los argumen-tos.

Los siguientes puntos son importantes:

� Los nombres de las relaciones deben comenzar con una letra min�uscula.

� Los objetos se escriben separados por comas y encerrados entre pa-r�entesis.

5

Page 6: Ingenier - unizar.es

� Al �nal del hecho debe de ir un punto.

Por ejemplo, un hecho es

persona(juan,27).

1.3 Las reglas

Cuando la verdad de un hecho depende de la verdad de otro hecho o de ungrupo de hechos se usa una regla. Una regla consiste en una cabeza y uncuerpo. El cuerpo puede estar formado por varios hechos u objetivos. Susintaxis es

cabeza :- objetivo 1, objetivo 2, ..., objetivo n.

Los objetivos van separados por comas, especi�cando conjunci�on y al�nal debe de ir un punto. Por ejemplo, una regla es

mayor de edad(X):-persona(X,E),E>18.

1.4 Las variables

Las variables se utilizan para describir hechos y reglas generales. Los nom-bres de las variables deben comenzar con letra may�uscula o con el car�acter( ). Existe una variable especial, la variable an�onima o blanca. Esta varia-ble se utiliza de la misma manera que las dem�as variables pero nunca tomaning�un valor.

1.5 La estructura de un programa en PDC-PROLOG

La mayor��a de los programas en PDC-Prolog est�an organizados en cuatrosecciones principales:

� domains

� predicates

� goal

� clauses

En la secci�on domains se declaran los argumentos que utilizan los predi-cados. Si son dominios prede�nidos no es necesario declararlos.

6

Page 7: Ingenier - unizar.es

En predicates se declaran todos los predicados no prede�nidos que seutilizar�an en la secci�on clauses. Los hechos y las reglas se escriben en lasecci�on clauses.

Como nuestro Prolog puede usarse de forma interactiva, es frecuenteejecutar un programa y luego esperar a que se nos pregunte el objetivo. Lasecci�on goal nos permite ejecutar los programas de una forma no interac-tiva, y por tanto, buscar�a la soluci�on deseada tan pronto como se ejecute elprograma.

1.6 Ejercicios propuestos

1.6.1 >Vegetal o animal?

1. Sin utilizar el ordenador descubre y explica los errores que hay en elsiguiente programa escrito en PROLOG:

domainscosa == symbol

predicatesanimal(cosa)vegetal(cosa).

clausesanimal(vaca).animal(murcielago).vegetal(secoya).animal(iguana).vegetal(helecho).computadora(ibm pc).computadora(apple macintosh)

2. Escribe el programa anterior corregido.

3. Cuando ejecutes el programa, ver�as aparecer la ventana de di�alogo;observa el mensaje goal y pregunta los siguientes objetivos:

(i) >El murci�elago es animal?

(ii) >El murci�elago es vegetal?

(iii) >El murci�elago es vegetal y animal?

(iv) >El murci�elago es vegetal o animal?

(v) Escribe todos los animales.

4. Introduce en el programa la siguiente secci�on y observa el resultado

7

Page 8: Ingenier - unizar.es

goalanimal(X),write(X).

1.6.2 Parentescos

Utilizando los predicados var�on, mujer, padre, madre y progenitor, escribereglas que expresen las siguientes relaciones:

(i) ser abuela de(X,Y)

(ii) ser nieto de(X,Y)

(iii) ser hermano de(X,Y)

(iv) ser sobrina de(X,Y)

Plasma lo anterior en un programa PROLOG y ejec�utalo varias veces paracomprobar que es correcto.

1.6.3 Una agencia matrimonial

Una agencia matrimonial tiene un �chero de candidatos al matrimonio or-ganizado seg�un las declaraciones siguientes:

hombre(N,A,C,E)mujer(N,A,C,E)

donde N es el nombre de un hombre o una mujer, A su altura (alta, media,baja), C el color de su cabello (rubio, casta~no, pelirrojo, negro) y E su edad(joven, adulta, madura).

gusta(N,M,L,S)

indica que a la persona N le gusta el g�enero de m�usica M (cl�asica, pop,jazz), el g�enero de literatura L (aventura, ciencia �cci�on, polic��aca ), y prac-tica el deporte S (tenis, nataci�on, jogging).

busca(N,A,C,E)

expresa que la persona N busca una pareja de altura A, con cabello decolor C y edad E.

Se considera que dos personas X e Y de sexos diferentes son adecuadas siX conviene a Y e Y conviene a X. Se dice que X conviene a Y, si X convienef��sicamente a Y (la altura, edad, y cabello de X son las que busca Y), y siadem�as, los gustos de X e Y en m�usica, literatura y deporte coinciden.

8

Page 9: Ingenier - unizar.es

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

(ii) Escribe las reglas:

conviene �sicamente(X,Y)

tiene igual gusto(X,Y)

(iii) Haz deducir al programa qu�e parejas son adecuadas.

1.6.4 Una agencia de viajes

Una agencia de viajes propone a sus clientes viajes de una o dos semanasa Roma, Londres o T�unez. El cat�alogo de la agencia contiene, para cadadestino, el precio del transporte (con independencia de la duraci�on) y elprecio de una semana de estancia que var��a seg�un el destino y el nivel decomodidad elegidos: hotel, hostal o camping.

(i) Escribe el conjunto de declaraciones que describen este cat�alogo (losprecios se dejan a tu elecci�on).

(ii) Expresa la relaci�on viaje(c,s,h,p) que se interpreta como: el viaje ala ciudad c durante s semanas con estancia en h cuesta p pesetas.

(iii) Completa con viaje econ�omico(c,s,h,p,p max) que expresa que elcoste p es menor que p max pesetas.

9

Page 10: Ingenier - unizar.es

2 La aritm�etica en PROLOG

2.1 Variable instanciada

Se dice que una variable est�a instanciada si ha adquirido un valor. Se uti-liza la palabra instanciar porque la asignaci�on de un valor a una variablees temporal; Prolog s�olo vincula valores a las variables mientras se est�acumpliendo el objetivo, si �este falla la variable es desvinculada de ese valor.

En Prolog expresiones comoN = N1�2 indican relaciones entre objetos.El valor de una expresi�on puede ser calculada si todas las variables est�aninstanciadas en el momento de su evaluaci�on. Si N no est�a instanciadael predicado igual se cumplir�a vinculando a N el valor de la expresi�on deN1 � 2. N1 debe estar siempre instanciada a un valor ya que es parte deuna expresi�on a evaluar.

2.2 El predicado igual

El predicado de igualdad est�a prede�nido. Cuando se intenta satisfacer elobjetivo

Goal: X=Y

Prolog intenta hacer coincidir X e Y, y el objetivo se satisface si ambascoinciden. Las reglas para decidir si X e Y son iguales son las siguientes:

� Si X es una variable no instanciada e Y est�a instanciada a un valor,entonces X e Y son iguales. Adem�as, X quedar�a instanciada a lo quevalga Y.

� Si X e Y son variables no instanciadas, el objetivo se satisface, y las dosvariables quedan compartidas. Si dos variables quedan compartidas,en el momento en que una de ellas quede instanciada a un t�ermino,la otra queda autom�aticamente instanciada al mismo t�ermino.

� Las constantes son siempre iguales a s�� mismas.

� Dos estructuras son iguales si tienen el mismo nombre y el mismon�umero de argumentos, y todos y cada uno de los correspondientesargumentos son iguales.

Como ya se ha indicado, una caracter��stica importante en Prolog y quelo diferencia de otros lenguajes de programaci�on, es que una variable s�olopuede tener un valor mientras se cumple el objetivo.

Hay dos predicados prede�nidos que permiten determinar si una variableest�a instanciada o no. Son los predicados free y bound.

10

Page 11: Ingenier - unizar.es

� bound(X): Este predicado se cumple si la variable X est�a instanciadaa alg�un valor.

� free(X): Se cumple si la variable X no est�a instanciada a ning�unvalor.

2.3 Ejercicios propuestos

2.3.1 Sobre el predicado igual

1. Indica si los siguientes objetivos se cumplen y escribe los valores quetoman las variables:

(a) Ordenador = sun.

(b) Ordenador = sun, unix = Sun.

(c) Ordenador = sun, Ordenador = Macintosh.

(d) Ordenador = sun, Ordenador = macintosh.

(e) fun(X,X) = fun(a,b).

(f) fun(X,a(b,c)) = fun(Z,a(Z,c)).

2. Completa la siguiente tabla, escribiendo los resultados que dar�a cadaexpresi�on, suponiendo que:

� Var1 ha sido instanciada a juan.

� Var2 ha sido instanciada a pepe.

� Var3 no est�a instanciada.

= luis Var1 Var2 Var3luis si luisVar1Var2Var3

2.3.2 Los n�umeros naturales

Escribe un predicado nat(X) que sea capaz de generar los n�umeros natu-rales. Debe actuar de la siguiente forma:

goal: nat(6) yesgoal: nat(X) 12345678...

Escribe un predicado mayorque(N,M) que genere los n�umeros natu-rales mayores que uno dado, M.

11

Page 12: Ingenier - unizar.es

2.3.3 El predicado suma

Escribe el predicado suma(X,Y,Z), de manera que Z es la suma de X e Y.Ejecuta

suma(2,3,8)suma(2,3,Z)

>Qu�e suceder��a si pregunt�aramos suma(X,3,8)? Escribe un programapara que resuelva este problema y sepa responder al objetivo suma(5,Y,8).Completa el programa para que resuelva suma(X,Y,8), con X; Y � 0.

2.3.4 El predicado m�aximo

Escribe el predicado maximo(X,Y,Z), de tal forma que Z sea el m�aximode X e Y, donde la variable Z puede estar instanciada o no.

2.3.5 El m��nimo com�un m�ultiplo

Escribe un predicado mcm(X,Y,M), que sea capaz de calcular dados X eY su m��nimo com�un m�ultiplo M y adem�as conteste si/no en el caso de queX,Y,M vengan instanciados.

2.3.6 Las ra��ces de una ecuaci�on de segundo grado

Dada la ecuaci�on ax2 + bx + c = 0 haz un programa en prolog que calculesus ra��ces.

Nota: Prolog tiene un predicado prede�nido, sqrt(real) que calcula lara��z de un n�umero real.

2.3.7 El factorial

Escribe un predicado fac(N,F) que signi�que que F es el factorial deln�umero natural N para los siguientes casos:

(a) Dado un n�umero natural N, que sea capaz de generar el factorial F.

(b) N y F vienen instanciados y debe contestar si/no.

(c) Ambas variables vienen sin instanciar y debe de generar todos lospares N, F.

Escribe un factorial universal que cubra todos los casos anteriores, es decir,que act�ue correctamente ante toda entrada.

12

Page 13: Ingenier - unizar.es

3 El proceso de Backtracking

3.1 Backtracking

En esta pr�actica se examina en detalle c�omo Prolog busca todas las solu-ciones a un objetivo.

Prolog responde a una pregunta hecha por el programador. Esta pre-gunta contiene una conjunci�on de objetivos que se deben satisfacer.

Un hecho puede hacer que un objetivo se cumpla inmediatamente, mien-tras que una regla s�olo puede reducir la tarea a la de satisfacer una con-junci�on de subobjetivos. Si no se puede satisfacer un objetivo, se iniciar�aun proceso de backtracking. Este proceso consiste en intentar satisfacer losobjetivos buscando una forma alternativa de hacerlo.

En nuestro prolog, se puede seguir el proceso de backtracking paso apaso. Basta con escribir la palabra trace al inicio del programa y pulsar latecla F10 para realizar el siguiente paso. La traza hace que el entorno pareel programa despu�es de cada paso y diga en la ventana Trace lo que hahecho, d�onde est�a y cu�ales son los valores de las variables. En esta ventanaaparece uno de los siguientes mensajes:

� CALL: Cuando intenta satisfacer un predicado.

� RETURN: Cuando un predicado se satisface.

� FAIL: Cuando un predicado no se satisface.

� REDO: Cuando se inicia el proceso de backtracking.

3.2 El predicado corte y el predicado fail

El corte es un predicado prede�nido y sin argumentos. Se escribe con elsigno de exclamaci�on \!" y se utiliza para impedir que se inicie el procesode backtracking. Como objetivo se cumple inmediatamente pero no puedesatisfacerse de nuevo. Su utilizaci�on puede ser muy importante para que elprograma funcione m�as deprisa y no malgaste memoria y tiempo en intentarsatisfacer objetivos que podemos decir de antemano que nunca contribuir�ana una soluci�on.

El predicado fail es tambi�en un predicado prede�nido, sin argumentosy siempre fracasa como objetivo, lo que provoca que se desencadene inme-diatamente el proceso de backtracking.

13

Page 14: Ingenier - unizar.es

Los predicados corte y fail se combinan para indicar situaciones err�oneas,es decir, para decir que se ha fallado y que no busque m�as soluciones.

3.3 Ejercicios propuestos

3.3.1 Sobre el predicado corte

1. Dado el programa:

hola(3):- !.hola(6).hola(X):- Y=X-1, hola(Y), write(Y).

Contesta a los siguientes objetivos sin ejecutar el programa:

(a) hola(4)

(b) hola(9)

(c) hola(2+1)

Comprueba si tus respuestas son correctas realizando una traza delprograma.

2. Considera el siguiente programa:

a(X):- b(X).a(X):- f(X).b(X):- g(X), !, v(X).b(X):- X=4, v(X).g(1).g(2).g(3).v(X).f(5).

Ejecuta con una traza a(X), y analiza si el resultado obtenido est�aen contradicci�on con el que sale al ejecutar los objetivos a(2), a(3) ya(4). >Cu�al ser��a la respuesta si quit�asemos el corte que aparece enla tercera l��nea?

3. Dado el siguiente programa:

nat(0,1):- !.nat(N,N).nat(N,M):- M1=M-1, nat(N,M1).p(N,M):- nat(N,M), write(N), nl, fail.p( , ).

14

Page 15: Ingenier - unizar.es

Contesta a los siguientes objetivos sin ejecutar el programa, y com-prueba si tus respuestas son correctas realizando una traza del pro-grama.

(a) p(0,0).

(b) p(1,0).

(c) p(0,1).

(d) p(N,0).

(e) p(N,3).

3.3.2 La funci�on de D'Ackerman

Construye un predicado que de�na la funci�on de D'Ackerman que vienedada por:

8>><>>:

A(0; n) = n + 1; n � 0A(m; 0) = A(m� 1; 1); m > 0A(m;n) = A(m� 1; A(m;n� 1)) m;n > 0no existe soluci�on; m < 0; n < 0:

3.3.3 El predicado intersecci�on

Se considera el siguiente programa:

pertenece(X, [X j ]).pertenece(X, [ j Y ]):- pertenece(X,Y).inter( [ ], [ ], ).inter( [X j Y], [X j L1], L2):- pertenece(X, L2), inter(Y, L1, L2).inter(Y, [ j L1 ], L2) :- inter(Y, L1, L2).

Se desea que el predicado inter funcione de la manera siguiente:

Goal: inter(X,[1,2,3],[2,3,4,5])

X=[2,3]

Goal: inter([2,3],X,[2,3,4,5])

X=[2,3]

1. Usa la traza para saber por qu�e el resultado obtenido por el programano es el deseado.

2. A~nade un corte en el lugar adecuado para solventar el problema.

15

Page 16: Ingenier - unizar.es

3.3.4 Campeonato de tenis

Se tiene una base de datos de los jugadores de tenis de un club con el nom-bre y la edad de cada uno de ellos dados de la siguiente forma:

jugador(juan,9).jugador(pedro,10).jugador(luis,9).

Escribe en Prolog un programa que calcule todos los posibles partidosentre los jugadores de la misma edad. Usa el corte para asegurar que \juancontra luis" y \luis contra juan" no sean escritos ambos en la pantalla.

16

Page 17: Ingenier - unizar.es

4 Listas y recursi�on

4.1 Listas

La lista es una manera f�acil de trabajar en situaciones donde es dif��cil oimposible predecir el n�umero de datos a ser guardados o manipulados.

En prolog, una lista es un objeto que contiene un n�umero arbitrario deotros objetos, llamados elementos de la lista. Los elementos de una listapueden ser de cualquier tipo de dato, incluso pueden ser a su vez listas. Heaqu�� un ejemplo de una lista de enteros:

[1; 2; 3; 4; 5]

La lista que no contiene ning�un elemento es la lista vac��a: [ ].

Las listas se manipulan dividi�endolas en una cabeza y una cola. Unalista, es realmente un objeto compuesto recursivo, que consiste en la cabezaque es el primer elemento y en la cola que es a su vez una lista que contienetodos los elementos excepto el primero.

Como una variable que no est�e instanciada se puede uni�car con cual-quier objeto, tambi�en lo puede hacer con una lista. Debido a que unaoperaci�on com�un con las listas es separarla en su cabeza y su cola, existeuna notaci�on especial en Prolog para representar la lista con cabeza X ycola Y . Esto se escribe [XjY ]. Una expresi�on con esta forma instanciar�a Xa la cabeza de una lista e Y a la cola de la lista.

4.2 Predicados con listas

La forma de trabajar con listas consiste en tomar la cabeza de la lista y luegohacer la misma operaci�on con la cola de la lista. Esta forma de trabajarutiliza dos reglas, una recursiva y un criterio de terminaci�on. Existen trescriterios de terminaci�on muy importantes:

1. Cuando la lista es vac��a.

El esquema general de todos los predicados que tienen como criteriode terminaci�on la lista vac��a es:

predicado([ ]) : �procesar([ ]):predicado([CabezajCola]) : �procesar(Cabeza); predicado(Cola):

2. Cuando un elemento en concreto es encontrado.

El esquema general es:

17

Page 18: Ingenier - unizar.es

predicado([Elemento; [Elementoj ]) : �procesar(Elemento):predicado(Elemento; [CabezajCola]) : �procesar(Cabeza);predicado(Elemento; Cola):

3. Cuando una posici�on en conreto es encontrada.

El esquema general es:

predicado([1; Elemento; [Elementoj ]) : �procesar(Elemento):predicado(P;Elemento; [ jCola]) : �P1 = P � 1; predicado(P1;Elemento; Cola):

4.3 Ejercicios propuestos

4.3.1 Algunos predicados sobre listas

Se de�nen cinco predicados Prolog para tratamiento de listas. Sin utilizarel ordenador comenta brevemente qu�e hace cada uno de ellos:

1. p1( [ ]; L; L ).p1( [X j L1]; L2; [X j L3] ) : �p1(L1; L2; L3 ).

2. p2(X; [X] ):p2(X; [ j T ]) : �p2(X; T ).

3. p3(X; Y; [X; Y j ]).p3(X; Y; [ j T ]) : �p3(X; Y; T ):

4. p4(X; [X j ]):p4(X; [ j T ]) : �p4(X; T ):

5. p5(X; [X j T ]; T ):p5(X; [Y j L1]; [Y j L2]) : �p5(X;L1; L2).

4.3.2 Predicados elementales sobre listas

Escribe los siguientes predicados:

1. elemento par(X,Lista)

Es cierto si X ocupa una posici�on par en la lista.

2. borra(X,Lista,Lista2)

Lista2 es el resultado de borrar el elemento X en todas las aparicionesen Lista.

3. mismo conjunto(Lista1,Lista2)

Es cierto si las dos listas tienen el mismo conjunto de elementos.

18

Page 19: Ingenier - unizar.es

4. sublista(Lista1,Lista2)

Cierto si Lista1 es sublista de Lista2.

5. inverso(Lista1,Lista2)

Devuelve en Lista2 los mismos elementos de L1 pero en orden inverso.

6. borra cadena(Sublista,Lista1,Lista2)

Lista2 es el resultado de borrar Sublista de Lista1.

7. subconjunto(Lista1,Lista2)

Dada Lista1, devuelve en Lista2 todos los posibles subconjuntos quese pueden formar con los elementos de Lista1.

19

Page 20: Ingenier - unizar.es

5 Acertijos y juegos

5.1 Ejercicios

A continuaci�on se enuncian ejercicios, acertijos y juegos de menor a mayordi�cultad.

5.1.1 pescalar(L1,L2,P)

P es el producto escalar de los vectores L1 y L2. Los dos vectores vienendados por las dos listas de enteros L1 y L2. El predicado debe fallar si losdos vectores tienen una longitud distinta.

5.1.2 sumadelosdemas(L)

Dada una lista de enteros L, se satisface si existe alg�un elemento en L quees igual a la suma de los dem�as elementos de L y falla en caso contrario.

5.1.3 trescopias(L)

De�ne un predicado que determine si una lista es una concatenaci�on de trescopias de la misma sublista.

5.1.4 capicua(L)

Construye un predicado que determine si una lista es capic�ua.

5.1.5 numerodeveces(L)

Escribe un predicado que nos indique todos los elementos de una lista y eln�umero de veces que aparece repetido cada uno de ellos.

5.1.6 dados(P,N,L)

La lista L expresa una manera de sumar P puntos lanzando N dados. Porejemplo, si P es 5 y N es 2, una soluci�on ser��a [1,4]. Las dem�as solucionesson: [3,2],[4,1] y [2,3]. (Notar que la longitud de L es N. P yN inicialmenteestar�an instanciados. El predicado debe ser capaz de generar todas lassoluciones posibles.

5.1.7 permuta(L,P)

La lista P contiene una permutaci�on de los elementos de la lista L. La listaL inicialmente estar�a instanciada y P no.

20

Page 21: Ingenier - unizar.es

5.1.8 merge(L1,L2,L3)

Dados L1 y L2 (listas de enteros de menor a mayor), L3 es la lista quecontiene los elementos de L1 y L2 ordenados de menor a mayor, medianteel proceso de merge o fusi�on: cada vez se a~nade a L3 un elemento de L1 oL2, seg�un convenga.

5.1.9 burbuja(L1,L2)

Dada una lista de enteros L1, la lista L2 contiene los mismos enteros orde-nados de menor a mayor por el m�etodo de ordenaci�on de la burbuja. (Estem�etodo consiste en intercambiar, mientras sea posible, pares de elementoscontiguos que est�en mal ordenados entre s��.

5.1.10 domino(L)

Se da una lista de �chas de domin�o, cada una de ellas representada por unalista de pares de n�umeros. Se trata de jugar de la manera usual:

1. Una �cha de domin�o se puede a~nadir a cualquiera de los dos �nalesde la serie formada.

2. Las caras de contacto deben llevar el mismo n�umero.

Comenzando con una �cha de domin�o arbitraria entre las dadas, construyeuna sucesi�on que las contenga todas.

5.1.11 Grupos de personas

Se dispone de una base de datos prolog que contiene predicados de la forma

persona(nombre,edad).

El problema consiste en hacer un programa prolog que, a partir de estabase de datos, nos genere todos los grupos de personas tales que la diferenciade edad m�axima entre dos de sus componentes sea menor que 10 a~nos.

5.1.12 El juego de las cifras

El jugador dispone de una lista L de n�umeros enteros y un objetivo N, quees otro n�umero entero. El jugador debe encontrar una manera de obtenerel objetivo N a base de sumar, restar y multiplicar algunos n�umeros de lalista L. Se puede usar cada n�umero tantas veces como aparezca en la lista L.

21

Page 22: Ingenier - unizar.es

Por ejemplo, cuando la lista L es [4,9,8,7,100,4] y el objetivo N es 380,algunas soluciones ser��an:

4 � (100� 7) + 8((100� 9) + 4) � 44 � (9 + 100)� 7 � 87 � (8 � (9� 4)) + 100; etc:

Lo que queremos es escribir un programa prolog que obtenga el objetivo.Para ello se pide lo siguiente:

1. Escribe un predicado subset(L,S) que, dado un conjunto (una listaL), obtenga un subconjunto S de L (sin cambiar el orden de los ele-mentos).

Escribe un predicado perm(L,P) que, dada una lista L, obtenga unapermutaci�on P de L.

Ambos predicados deben ser \resatisfacibles", es decir, bajo back-tracking deben ser capaces de generar todos los subconjuntos y per-mutaciones posibles.

2. Haz un predicado est(S,E) que, dada una lista S de n�umeros en-teros, nos devuelva en E una estructura obtenida mediante el en-cadenamiento, sin cambiar el orden de los n�umeros, de TODOS losn�umeros de S con los operadores +, � y �. (resatisfacible: podergenerarlas todas).

Por ejemplo, con la lista [3,8,5,7], 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, la estruc-tura es ese elemento, y si tiene m�as de uno, entonces la estructura esuna operaci�on aplicada a dos estructuras (obtenidas con una primeraparte de la lista y con una segunda).

3. Escribe un predicado obtenible(L,E) que, usando los resultados delos apartados 1) y 2), genere estructuras E obtenibles con L.

4. Escribe un predicado juego(L,N) que genere todas las solucionesposibles.

22

Page 23: Ingenier - unizar.es

5.1.13 El estanco

Un cliente dice al empleado de un estanco:

\Tengo 100 pesetas, quiero que me des algunos sellos de 1 peseta, eldoble de esa cantidad de sellos de 2 pesetas y todo lo que quede en sellosde 5 pesetas."

Se debe gastar las 100 pesetas juntas. Haz un programa prolog queresuelva el problema.

5.1.14 N turistas en 3 habitaciones

En un hotel hay 3 habitaciones numeradas del 1 al 3. En cada una de ellashay cuatro camas. El problema consiste en hacer un programa prolog quenos permita obtener todas las maneras posibles de distribuir N turistas enlas tres habitaciones.

5.1.15 Un acertijo con aceite y vinagre

Cada uno de los barriles en la ilustraci�on adjunta contiene aceite o vinagre.El gal�on de aceite cuesta el doble que el de vinagre. Un cliente compra 4200pesetas de cada uno, dejando s�olo un barril. >Qu�e barril queda y cu�antovale un gal�on de aceite?

5.1.16 Las torres de Hanoi

En el gran templo de Benar�es, debajo de la c�upula que marca el centrodel mundo, est�a colocada una placa de bronce, sobre la cual est�an �jadas

23

Page 24: Ingenier - unizar.es

tres agujas de diamante, cada una de las cuales tiene un codo de alturay su espesor es como el cuerpo de una abeja. En una de estas agujas,cuando se cre�o el mundo, Dios coloc�o sesenta y cuatro discos de oro puro,el mayor de los cuales se apoya sobre la placa de bronce y los dem�as, pororden de tama~no decreciente, descansan sobre �el. Esto constituye la torre deBrahma. D��a y noche, incesantemente, los sacerdotes traspasan los discosde una de las agujas de diamante a la otra, de acuerdo a las leyes �jas einmutables de Brahma. Estas exigen que mientras realiza su tarea, no debemover m�as de un disco por vez y que lo debe colocar en una aguja de modoque no quede debajo de �el ning�un disco de menor di�ametro. Cuando lossesenta y cuatro discos hayan sido traspasados de esta manera, de la agujadonde Dios los coloc�o en la creaci�on, a una de las otras dos agujas, torre,templo y brahmanes, por igual, se desmenuzar�an en polvo, y en medio deun fragoroso trueno, el mundo desaparecer�a.

5.1.17 El acertijo del lechero

El honesto John dice: \Lo que ignoro acerca de la leche no vale la penamencionarse", pero se qued�o at�onito un d��a cuando dos damas le pidierondos cuartos de leche cada una. Una de ellas ten��a un recipiente de cincocuartos y la otra uno de cuatro cuartos. John s�olo dispon��a de dos tarros dediez galones, ambos llenos de leche. Cada gal�on equivale a cuatro cuartos.>C�omo hizo para medir exactamente dos cuartos de leche?

24

Page 25: Ingenier - unizar.es

5.1.18 Problema del grafo

Sea el grafo

Terminolog��a usada: hay un camino entre los v�ertices \a" y \d" represen-tado por la lista [a,b,c,d]. Su longitud es 3 y su coste es de 60. Se tienela siguiente representaci�on del grafo en la base de datos de Prolog:

vertices([a,b,c,d,e])arista(a,b,30).arista(a,e,50).arista(b,c,10).arista(c,a,50).arista(c,d,20).arista(d,b,50).arista(e,d,70).

Los siguientes predicados deben terminar siempre y deben funcionarpara todo grafo representado de esta manera. Ten en cuenta las ayudas yque hay que hacer todos los predicados usados.

1. Escribe un predicado camino(V1,V2,N) que se satisface si hay cami-no de longitud N entre los v�ertices V1 y V2, y falla en caso contrario.Todos los argumentos vienen instanciados.

2. Escribe un predicado hay camino(V1,V2) que se satisface si haycamino entre los v�ertices V1 y V2, y falla en caso contrario. Los dosargumentos vienen instanciados.

Ayuda: usa el apartado anterior y el predicado nat max.

3. Escribe un predicado camino coste(V1,V2,C,T) que se satisface sihay camino C de coste total T entre los v�ertices V1 y V2, y falla encaso contrario. Los argumentos V1, V2 y T vienen instanciados y Ces el camino que hay que encontrar.

Ayuda: adapta el primer apartado.

25

Page 26: Ingenier - unizar.es

4. Construye un predicado camino minimo(V1,V2) que escriba elcamino de coste m��nimo entre los v�ertices V1 y V2, con su coste.Los dos argumentos vienen instanciados. Este predicado debe fallarsi no hay camino. Si hay m�as de un camino m��nimo, entonces se dauno cualquiera de ellos.

Ayuda: usa los apartados 2) y 3) y el predicado nat(N).

Ejemplo:

?- camino minimo(a,d).

camino: [a,b,c,d]

coste: 60

yes

?-

5.1.19 Las 9 casillas

Sea un tablero de nueve casillas tal como se muestra en la �gura.

Las B�s y la N�s representan caballos de ajedrez blancos y negros respec-tivamente. El problema consiste en pasar de la posici�on 1 a la posici�on 2teniendo en cuenta que:

1. Los caballos se mueven seg�un las reglas del ajedrez. (En la �gura haypunteado un ejemplo de movimiento correcto).

2. Los caballos pueden ser movidos en cualquier orden.

3. En ning�un momento puede haber dos caballos en la misma casilla.

4. Todos los caballos han de estar en todo momento dentro del tablero.

26

Page 27: Ingenier - unizar.es

5.1.20 Duros y pesetas

Sea un tablero de 5�1 casillas, en el cual se encuentran cuatro monedas(dos duros y dos pesetas) dispuestas de la manera que se muestra en la�gura.

Las reglas para efectuar los movimientos son las siguientes:

1. Las pesetas s�olo pueden ser movidas hacia la derecha.

2. Los duros s�olo pueden ser movidos hacia la izquierda.

3. Los movimientos permitidos son deslizar y saltar.

El problema consiste en encontrar una secuencia de movimientos queintercambie las posiciones de las monedas, las pesetas deben quedar a laderecha y los duros a la izquierda.

5.1.21 Pim{Pam{Pum

Un amigo y yo est�abamos dando un paseo por los juegos de Coney Islandel otro d��a cuando llegamos hasta uno que, seg�un nos dijo el hombre, erael juego m�as honesto de la playa. Hab��a diez mu~nequitos que uno deb��avoltear con pelotas de beisbol. El hombre dijo: \Tiene usted tantos tiroscomo quiera, a un centavo cada uno y puede hacerlos desde tan cerca comolo desee. Sume los n�umeros de todos los mu~necos que voltee y cuando lacifra llegue exactamente a 50, ni m�as ni menos, ganar�a usted un cigarroMaggie Cline, de 25 centavos, con una banda dorada alrededor".

Nos quedamos sin dinero antes de que pudi�eramos ganar y notamos quenadie all�� estaba fumando Maggie Cline.

27

Page 28: Ingenier - unizar.es

Indica de qu�e modo hubi�eramos podido hacer exactamente 50 puntos.

5.1.22 Las nueve monedas

Tenemos nueve monedas dispuestas de la manera que muestra el dibujo.

El objetivo del solitario consiste en eliminar todas las monedas menosuna. Una moneda se puede eliminar haciendo que salte por encima de ellaotra moneda que se encuentre en una posici�on contigua, siempre que \caiga"en una posici�on vac��a y no se salga del tri�angulo que forman las monedasal comenzar la partida. Por ejemplo, un movimiento v�alido a partir de laposici�on inicial consistir��a en hacer saltar la moneda A por encima de la Bhasta la posici�on vac��a y retirar la moneda B.

Escribe un programa Prolog que resuelva el solitario.

28

Page 29: Ingenier - unizar.es

5.1.23 En el pa��s de los acertijos

La ilustraci�on muestra a Guillermo Tell a treinta y cinco yardas del poste,presto a demostrar su pericia dispar�andole a las manzanas que sostieneTommy Riddles.

Indica a qu�e manzanas acert�o para lograr exactamente 100, suponiendoque se puede disparar a la misma manzana tantas veces como se quiera.

5.1.24 Un acertijo de arquer��a

Indica cu�antas echas hacen falta para hacer justo cien puntos en esteblanco.

29

Page 30: Ingenier - unizar.es

5.1.25 Tiro al pavo

He aqu�� un juego de tiro al blanco en el que particip�e cierta vez. El premioera un pavo gordo, y recuerdo que todos empatamos con la misma pun-tuaci�on.

Cada uno dispar�o seis tiros y marc�o setenta y un puntos. Indica los seistiros que hizo cada participante.

5.1.26 El acertijo de la mudanza

La ilustraci�on muestra una pareja que acaba de mudarse a un simp�aticoapartamento de seis habitaciones. Tienen cinco muebles de gran tama~no:CAMA, mesa, sof�a, librer��a y escritorio. Estos muebles son tan grandes

30

Page 31: Ingenier - unizar.es

que dos de ellos no caben al mismo tiempo en ninguno de los cuartos. Loque ha ocurrido sin embargo, es que los de la compa~n��a de mudanzas hancolocado la librer��a y la cama en cuartos equivocados. El hombre y su es-posa han tratado de imaginar durante varias horas un plan e�ciente paraintercambiar esos muebles de lugar.

Como el hombre es sistem�atico, ha hecho un diagrama de su aparta-mento y luego ha colocado cinco objetos peque~nos dentro de los cuadrados,para representar as�� los muebles que deben ser cambiados de lugar.

La botella de whisky representa la cama y el cepillo es la librer��a. Sepide que intercambies de lugar estos dos muebles, moviendo un objeto porvez al cuarto vac��o adyacente.

5.1.27 El acertijo del salvamento del fuego

El m�etodo de Binks de salvamento contra incendios es simplemente unasoga que pasa por una polea y tiene en cada extremo una gran canasta.Cuando una canasta baja, la otra sube. Colocando un objeto en una delas canastas para que act�ue de contrapeso, un objeto m�as pesado puede serbajado en la otra canasta. El inventor dice que su aparato debe ser colgadoafuera de todos los dormitorios del mundo. El sistema fue adoptado en unhotel, pero los hu�espedes lo utilizaron para escapar durante la noche sinpagar, por lo que el mecanismo no sigui�o contando con la aprobaci�on de loshosteleros.

El dibujo muestra un ascensor Binks situado ante la ventana de un mod-erno hotel veraniego. Nada que pese m�as de treinta libras puede ser bajado

31

Page 32: Ingenier - unizar.es

con seguridad en una canasta mientras la otra est�a vac��a, y treinta libras esel l��mite de seguridad de la diferencia que puede existir entre ambas canas-tas cuando las dos llevan un peso.

Una noche se produjo un incendio en el hotel, y todos los hu�espedes lle-garon a escapar excepto el vigilante nocturno y su familia. No pudieron serdespertados hasta que todas las v��as de escape, excepto el ascensor Binks,estuvieron cerradas. El vigilante pesaba 90 libras, su esposa 210 libras, elperro 60 libras y el beb�e 30 libras.

Cada canasta tiene capacidad para los cuatro, pero no pueden usarsepesos en las canastas (s�olo el hombre, su esposa, el perro y el beb�e). Sise supone que ni el perro ni el beb�e son capaces de entrar o salir de lacanasta sin la ayuda del hombre o de su esposa, indica cu�al es la maneram�as e�ciente de que los cuatro bajen a salvo.

5.1.28 Descarte a los varones

Un d��a sucedi�o que diez ni~nos (cinco varones y cinco ni~nas) que volv��an dela escuela, hallaron cinco peniques. Una ni~nita fue quien hall�o el dinero,pero Tommy Muttonhead aleg�o que como estaban juntos, el \hallazgo"pertenec��a al grupo. Conoc��a el acertijo de los turcos y los cristianos, demodo que pens�o que ser��a bueno que todos se acomodaran en un c��rculo yque se diera un penique a los primeros cinco ni~nos que fueran descartadosdel conteo.

La ilustraci�on muestra d�onde puso Tommy a las cinco ni~nas. Empezandopor la ni~na sin sombrero de la parte superior y contando en el sentido de

32

Page 33: Ingenier - unizar.es

las agujas del reloj, el n�umero trece siempre ser�a una ni~na. Por supuesto,en cuanto una de las ni~nas es descartada debe abandonar el c��rculo parano ser incluida en el conteo siguiente. El plan de Tommy era que los cincovarones consiguieran un penique cada uno, pero olvid�o que �el mismo hab��adispuesto que recibieran el penique los que eran descartados, de maneraque result�o que las chicas se quedaron con el dinero y todos los chicos seenojaron con Tom.

El problema consiste en determinar cu�al es el menor n�umero que Tommydeber��a haber utilizado en lugar de trece, para descartar a los cinco varones,y no a las ni~nas. Tambi�en deber�a determinarse el lugar inicial del conteo.

5.1.29 El problema del convento

El convento, tal como lo muestra la ilustraci�on, era una estructura cuadradade tres pisos, con seis ventanas en cada lado de los pisos superiores. Se veclaramente que hay ocho cuartos en cada uno de los pisos superiores. Seg�unla leyenda, los pisos superiores eran utilizados como dormitorios. El �ultimopiso, que ten��a camas en cada una de las habitaciones, albergaba el doblede ocupantes que el primer piso.

La Madre Superiora, de acuerdo con la vieja regla de los fundadores,insist��a en que las hermanas deb��an dividirse de manera que se ocupasentodas las habitaciones; deb��a haber exactamente once monjas en las seishabitaciones de cada uno de los cuatro lados del convento. El problema sere�ere tan s�olo a los dos pisos superiores, de modo que no es necesario quese considere la planta baja.

Bien, ocurri�o que tras la retirada del ejercito franc�es a trav�es del pasode los Pirineos, se descubri�o que hab��an desaparecido nueve monjas, de las

33

Page 34: Ingenier - unizar.es

m�as jovenes y atractivas. Siempre se crey�o que hab��an sido capturadas porlos soldados. Sin embargo, para no preocupar a la Madre Superiora, lasmonjas que advirtieron la desaparici�on se las arreglaron para ocultar el he-cho por medio de una inteligente manipulaci�on o cambio de las ocupantesde las habitaciones.

As��, las monjas lograron reacomodarse de tal modo que, cuando la MadreSuperiora hac��a sus rondas nocturnas, hallaba todos los cuartos ocupados;once monjas en cada uno de los lados del convento; el doble en el �ultimo pisoque en el primero, y no obstante, faltaban nueve monjas. Indica cu�antasmonjas hab��a y c�omo se dispusieron.

5.1.30 Antes y despu�es

Existe un bonito acertijo, o especie de solitario, que se hizo muy popularen Europa. Es un invento ingl�es, ya que fue ideado por un marinero ingl�es,que pas�o cuarenta a~nos de su vida en el Sailor's Snug Harbor, en StatenIsland. El juego lleg�o a Londres, donde goz�o de gran popularidad con elnombre de Acertijo Ingl�es de las Dieciseis, pero nunca fue comercializado.

El objeto del juego es trasponer las posiciones de las piezas blancas ynegras en el menor n�umero posible de movimientos. Cada pieza puede sermovida de un cuadrado al adyacente, siempre que este �ultimo est�e vac��o, opueda saltar por encima de una pieza adyacente (de cualquier color), siem-pre que aterrice en otro cuadrado vac��o. S�olo se permiten los movimientosdentro de la misma �la (como la torre en el ajedrez); nada de movimientosen diagonal como en las damas.

34

Page 35: Ingenier - unizar.es

5.1.31 El rompecabezas 14-15

Los veteranos habitantes del Pas de los Acertijos recordar�an que en lad�ecada de 1870 enloquec��a todo el mundo con una cajita de bloques m�ovilesque hizo conocida bajo el nombre de \Rompecabezas 14-15". Los quincebloques estaban dispuestos dentro de la caja cuadrada en orden pero con el14 y el 15 invertidos tal como se ve en la ilustraci�on. El problema consist��aen desplazar los bloques, uno por vez, hasta lograr nuevamente la posici�oninicial pero corrigiendo el error del 14 y el 15.

El premio de 1000 d�olares, ofrecido a quien presentara la primera soluci�oncorrecta del problema, jam�as ha sido otorgado, aunque miles de personasdicen haber llevado a cabo la proeza.

La gente se transtorn�o con el rompecabezas, y se cuentan rid��culas his-torias acerca de comerciantes que dejaron de abrir sus comercios; acercade un distinguido cl�erigo que permaneci�o toda una noche de invierno enla calle, debajo de un farol, tratando de recordar de qu�e manera habia re-suelto el problema. El rasgo misterioso del problema es que nadie parec��aser capaz de recordar la secuencia de movimientos mediante los cuales hab��alogrado resolverlo. Se dice que hubo pilotos que encallaron sus barcos, ymaquinistas que no deten��an sus trenes en las estaciones. Se sabe que losgranjeros abandonaron sus cosechas, y uno de esos casos es el que eleg��para la ilustraci�on. Resuelve el problema dejando un cuadrado vac��o en laesquina superior izquierda en vez de en la esquina inferior derecha.

35

Page 36: Ingenier - unizar.es

References

[1] P. Robinson, 1988. Aplique Turbo Prolog. Mc.Graw{Hill.

[2] F. Giannesini, H. Kanoui, R. Pasero and M. Caneghem, 1989. Prolog.Addison-Wesley.

[3] W.F. Clocksin and C.S. Mellish, 1993. Programacin en PROLOG.Coleccin Ciencia Informtica.

[4] M.Gardner, 1988. Los acertijos de Sam Loyd. Ediciones Juan Granica,S.A.

[5] M.Gardner, 1989. Nuevos acertijos de Sam Loyd. Ediciones JuanGranica, S.A.

36