You are on page 1of 107

Ejercicios de programacin declarativa con

Prolog
Jos A. Alonso Jimnez

Grupo de Lgica Computacional


Dpto. de Ciencias de la Computacin e Inteligencia Artificial
Universidad de Sevilla
Sevilla, 1 de Enero de 2006 (Versin de 7 de noviembre de 2006)

2
Esta obra est bajo una licencia ReconocimientoNoComercialCompartirIgual 2.5 Spain de Creative Commons.

Se permite:
copiar, distribuir y comunicar pblicamente la obra
hacer obras derivadas
Bajo las condiciones siguientes:
Reconocimiento. Debe reconocer los crditos de la obra de la manera especificada
por el autor.
No comercial. No puede utilizar esta obra para fines comerciales.
Compartir bajo la misma licencia. Si altera o transforma esta obra, o genera una
obra derivada, slo puede distribuir la obra generada bajo una licencia idntica a
sta.
Al reutilizar o distribuir la obra, tiene que dejar bien claro los trminos de la licencia
de esta obra.
Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular
de los derechos de autor.

Esto es un resumen de la licencia completa. Para ver una copia de esta licencia, visite
o envie una carta a
Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.

ndice general
Introduccin
1. Operaciones con listas
1.1. Primer elemento . . . . . . . . . . . . .
1.2. Resto de una lista . . . . . . . . . . . .
1.3. Construccin de listas . . . . . . . . .
1.4. Relacin de pertenencia . . . . . . . .
1.5. Concatenacin de listas . . . . . . . . .
1.6. Lista inversa . . . . . . . . . . . . . . .
1.7. Palndromo . . . . . . . . . . . . . . .
1.8. ltimo elemento . . . . . . . . . . . . .
1.9. Penltimo elemento . . . . . . . . . . .
1.10. Seleccin de un elemento . . . . . . . .
1.11. Insercin de un elemento en una lista
1.12. Sublista . . . . . . . . . . . . . . . . . .
1.13. Permutacin . . . . . . . . . . . . . . .
1.14. Lista con todos sus elementos iguales
1.15. Paridad de la longitud de una lista . .
1.16. Rotacin de un elemento . . . . . . . .
1.17. Subconjunto . . . . . . . . . . . . . . .

6
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

2. Aritmtica
2.1. Mximo de dos nmeros . . . . . . . . . .
2.2. Factorial . . . . . . . . . . . . . . . . . . .
2.3. Sucesin de Fibonacci . . . . . . . . . . . .
2.4. Mximo comn divisor . . . . . . . . . . .
2.5. Longitud de una lista . . . . . . . . . . . .
2.6. Lista de nmeros acotada por su longitud
2.7. Mximo de una lista de nmeros . . . . .
2.8. Suma de los elementos de una lista . . . .
2.9. Lista de nmeros ordenada . . . . . . . .
2.10. Suma parcial de una lista . . . . . . . . . .
2.11. Lista de veces el nmero . . . . . . . .
2.12. Generacin de lista de nmeros . . . . . .
2.13. Intervalo entero . . . . . . . . . . . . . . .
2.14. Ksimo elemento . . . . . . . . . . . . . .
3

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

9
9
10
10
11
12
13
14
14
15
15
16
16
17
17
17
18
18

.
.
.
.
.
.
.
.
.
.
.
.
.
.

21
21
21
22
22
23
23
24
24
24
25
25
26
26
27

ndice general
2.15. Multiplicacin de las ocurrencias de los elementos de una lista . . . . . . . . . . . .

3. Estructuras
3.1. Segmentos como objetos estructurados
3.2. Base de datos familiar . . . . . . . . .
3.3. Autmata nodeterminista . . . . . . .
3.4. El problema del mono y el pltano . .
3.5. Movimientos del caballo del ajedrez .
3.6. Mximo elemento de un rbol binario

27

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

29
29
31
36
40
41
43

4. Retroceso, corte y negacin


4.1. Ejemplos de uso del corte . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
4.2. rboles de deduccin de
4.3. Diferencia de conjuntos . . . . . . . . . . . . . . . . . . . . . .
4.4. Agregacin de un elemento a un conjunto . . . . . . . . . . .
4.5. Separacin de una lista de nmeros en positivos y negativos
4.6. Suma de los nmeros pares de una lista de nmeros . . . .
4.7. Exponente de dos en la factorizacin de un nmero . . . . .
4.8. Transformacin de lista a conjunto . . . . . . . . . . . . . . .
4.9. Signos de crecimientos de sucesiones numricas . . . . . . .
4.10. Descomposicin en factores primos . . . . . . . . . . . . . . .
4.11. Menor elemento que cumple una propiedad . . . . . . . . .
4.12. Nmeros libres de cuadrados . . . . . . . . . . . . . . . . . .
4.13. Suma de los nmeros libres de cuadrados . . . . . . . . . . .
4.14. Mximo nmero de una lista . . . . . . . . . . . . . . . . . .
4.15. Longitud de las subsucesiones comunes maximales . . . . .
4.16. Elementos repetidos en una lista . . . . . . . . . . . . . . . .
4.17. Subconjunto maximal . . . . . . . . . . . . . . . . . . . . . . .
4.18. Suma de los elementos con posiciones mltiplos de n . . . .
4.19. Compresin de listas . . . . . . . . . . . . . . . . . . . . . . .
4.20. Empaquetamiento de listas . . . . . . . . . . . . . . . . . . .
4.21. Codificacin por longitud . . . . . . . . . . . . . . . . . . . .
4.22. Codificacin reducida por longitud . . . . . . . . . . . . . . .
4.23. Decodificacin de lista . . . . . . . . . . . . . . . . . . . . . .
4.24. Codificacin reducida directa . . . . . . . . . . . . . . . . . .
4.25. Cota superior de una lista de nmeros . . . . . . . . . . . . .
4.26. Dientes de sierra . . . . . . . . . . . . . . . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

45
45
48
48
50
51
51
52
53
54
55
56
57
57
58
58
59
60
60
61
62
62
63
64
64
66
67

5. Programacin lgica de segundo orden


5.1. Determinacin de un nmero por su factorial . . . . . . .
5.2. rbol de resolucin y definiciones equivalentes . . . . .
5.3. Nodos de una generacin en una lista de rboles binarios
5.4. Lista de elementos nicos . . . . . . . . . . . . . . . . . .
5.5. Elementos ms frecuentes de una lista . . . . . . . . . . .
5.6. Problema 3n + 1 . . . . . . . . . . . . . . . . . . . . . . . .
5.7. Nmeros perfectos . . . . . . . . . . . . . . . . . . . . . .

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

69
69
71
73
74
74
75
77

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

ndice general
5.8. Determinacin de tringulos equilteros . . . . . . .
5.9. Operacin binaria aplicada a listas . . . . . . . . . .
5.10. Nmeros en un trmino . . . . . . . . . . . . . . . .
5.11. Palabra sin vocales . . . . . . . . . . . . . . . . . . .
5.12. Palabras maximales . . . . . . . . . . . . . . . . . . .
5.13. Clausura transitiva de una relacin . . . . . . . . . .
5.14. Traduccin de cifras a palabras . . . . . . . . . . . .
5.15. Transformacin de lista dependiente de la posicin
5.16. Aplanamiento de listas . . . . . . . . . . . . . . . . .

5
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

80
80
80
81
82
82
83
84
85

6. Estilo y eficiencia en programacin lgica


6.1. Nmero de Hardy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2. Subconjuntos de suma dada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.3. Coloreado de mapas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

87
87
90
92

7. Aplicaciones de programacin declarativa


95
7.1. Formacin de grupos minimales de asignaturas compatibles . . . . . . . . . . . . . 95
7.2. Simulacin de una calculadora bsica . . . . . . . . . . . . . . . . . . . . . . . . . . 98
7.3. Problema de las subastas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
Bibliografa

107

Indice de definiciones

107

ndice general

Introduccin
El objetivo del presente trabajo es presentar una coleccin de ejercicios para la asignatura
Programacin declarativa de tercer curso de la Ingeniera Informtica.
Estos ejercicios complementa los apuntes de introduccin a la programacin declarativa con
Prolog ([1]) y a las transparencias de clase ([2]).
Todos los ejercicios se han comprobado usando la versin 5.6.18 de SWI Prolog.

ndice general

Captulo 1
Operaciones con listas
Una lista es la lista vaca o se compone de un primer elemento y un resto, que es una lista. En
Prolog, la lista vaca se representa por
y las listas no vaca son de la forma
donde es la
cabeza y es el resto.

1.1. Primer elemento


Ejercicio 1.1 Definir la relacin
Por ejemplo,

que se verifique si

Obtener las respuestas a las siguientes preguntas:

Solucin: La definicin de

es

Las respuestas a las preguntas son

es el primer elemento de la lista .

10

Captulo 1. Operaciones con listas

1.2. Resto de una lista


que se verifique si
Ejercicio 1.2 Definir la relacin
lista
suprimiendo el primer elemento. Por ejemplo,

es la lista obtenida a partir de la

Obtener las respuestas a las siguientes preguntas:

Solucin: La definicin de

es

Las respuestas a las preguntas son

1.3. Construccin de listas


Ejercicio 1.3 Definir la relacin
a
como primer elemento. Por ejemplo,

que se verifique si

Obtener las respuestas correspondientes a las siguientes preguntas:

Solucin: La definicin de

es

Las respuestas a las preguntas son

es la lista obtenida aadindole

1.4. Relacin de pertenencia

11

1.4. Relacin de pertenencia


Ejercicio 1.4 Definir la relacin
ejemplo,

que se verifique si es un elemento de la lista . Por

Utilizar el programa para responder a las siguientes cuestiones:


1. Es

un elemento de

?
?

2. Cules son los elementos de


3. Cules son los elementos comunes de

,y

Solucin: La definicin de

, por recursin en , es

Las respuesta a las preguntas son


1. Es

un elemento de

2. Cules son los elementos de

3. Cules son los elementos comunes de

Nota: La relacin

,y

se corresponde con la definida

12

Captulo 1. Operaciones con listas

1.5. Concatenacin de listas


que se verifique si
Ejercicio 1.5 Definir la relacin
los elementos de
a continuacin de los elementos de . Por ejemplo,

es la lista obtenida escribiendo

Utilizar el programa para responder a las siguientes cuestiones:


1. Qu lista hay que aadirle al lista

para obtener

2. Qu listas hay que concatenar para obtener


a la lista

3. Pertenece

4. Es

una sublista de

5. Es

una sublista de

?
?

6. Cul es el ltimo elemento de


Solucin: La definicin de

, por recursin en

, es

Las repuestas a las cuestiones son


1. Qu lista hay que aadirle al lista

para obtener

2. Qu listas hay que concatenar para obtener

3. Pertenece

a la lista

1.6. Lista inversa

13

4. Es

una sublista de

5. Es

una sublista de

6. Cul es el ltimo elemento de

Nota: La relacin

se corresponde con la definida

1.6. Lista inversa


Ejercicio 1.6 Definir la relacin
el orden de los elementos de la lista

que se verifique si
. Por ejemplo,

Solucin: Vamos a presentar dos definiciones de


en .
, se define
Primera solucin: Usando la relacin

Segunda solucin: Usando un acumulador, se define

La relacin
inversa de
a

y se define por recursin en

Nota: La relacin

es la lista obtenida invirtiendo

se verifica si
como sigue

. Ambas son por recursin


como

como

es la lista obtenida aadiendo la

se corresponde con la relacin definida

14

Captulo 1. Operaciones con listas

1.7. Palndromo
Ejercicio 1.7 Un palndromo es una palabra que se lee igual en los dos sentidos, por ejemplo oso. Definir
la relacin
que se verifique si la lista es un palndromo. Por ejemplo,

Solucin: La definicin de

es

1.8. ltimo elemento


Ejercicio 1.8 Definir la relacin
Por ejemplo,

que se verifique si

Solucin: Presentamos tres definiciones de


Primera solucin: Usando
se define

Segunda solucin: Usando

Tercera solucin: Una definicin de

Nota: La relacin

se define

es el ltimo elemento de la lista .

.
por

por

por recursin en

se corresponde con la relacin definida

es

1.9. Penltimo elemento

15

1.9. Penltimo elemento


Ejercicio 1.9 Definir lar relacin
lista . Por ejemplo,

que se verifique si

Solucin: Se presentan tres definiciones de


Primera solucin: Usando
se define

Segunda solucin: Usando

se define

Tercera solucin: Una definicin de

es el penltimo elemento de la

.
por

por

por recursin en

es

1.10. Seleccin de un elemento


Ejercicio 1.10 Definir la relacin
eliminando una ocurrencia de en

que se verifique si
. Por ejemplo,

es la lista obtenida

16

Captulo 1. Operaciones con listas


Solucin: La definicin de

Nota: La relacin

, por recursin en

se corresponde con la definida

, es

1.11. Insercin de un elemento en una lista


Ejercicio 1.11 Definir la relacin
sertando en . Por ejemplo,

Solucin: La definicin de

que se verifique si

es una lista obtenida in-

es

1.12. Sublista
Ejercicio 1.12 Definir la relacin
ejemplo,

Solucin: La definicin de

que se verifique si

es

es una sublista de

. Por

1.13. Permutacin

17

1.13. Permutacin
Ejercicio 1.13 Definir la relacin
. Por ejemplo,

que se verifique si

Solucin: La definicin de

Nota: La relacin

, por recursin en

es una permutacin de

es

es equivalente a la definida

1.14. Lista con todos sus elementos iguales


Ejercicio 1.14 Definir la relacin
son iguales entre s. Por ejemplo,

Solucin: La definicin de

que se verifique si todos los elementos de la lista

es

1.15. Paridad de la longitud de una lista


Ejercicio 1.15 Definir la relacin
Por ejemplo,

que se verifique si la longitud de la lista

es par.

18

Captulo 1. Operaciones con listas

Solucin: La definicin de

, por recursin cruzada con la relacin

es

La relacin

se verifica si la longitud de la lista

La definicin de

es

es impar. Por ejemplo,

1.16. Rotacin de un elemento


que se verifique si
Ejercicio 1.16 Definir la relacin
colocando su primer elemento al final. Por ejemplo,

Solucin: La definicin de

es la lista obtenida a partir de

es

1.17. Subconjunto
Ejercicio 1.17 Definir la relacin
. Por ejemplo,

que se verifique si

es un subconjunto de

1.17. Subconjunto

Solucin: La definicin de

19

, por recursin en

, es

20

Captulo 1. Operaciones con listas

Captulo 2
Aritmtica
2.1. Mximo de dos nmeros
Ejercicio 2.1 Definir la relacin
ejemplo,

Solucin: La definicin de

que se verifique si

es el mximo de

e . Por

que devuelve el mximo de

e . Por

es

Nota: En Prolog est definida la funcin


ejemplo,

2.2. Factorial
Ejercicio 2.2 Definir la relacin

Solucin: La definicin de

que se verifique si es el factorial de . Por ejemplo,

, por recursin sobre , es


21

22

Captulo 2. Aritmtica

2.3. Sucesin de Fibonacci


Ejercicio 2.3 La sucesin de Fibonacci es 0,1,1,2,3,5,8,13,21,. . . en la que cada trmino, salvo los dos primeros, es la suma de los dos anteriores. Definir la relacin
que se verifique si es el
simo trmino de la sucesin de Fibonacci. Por ejemplo,

Solucin: La definicin de

, por induccin en , es

2.4. Mximo comn divisor


Ejercicio 2.4 Definir la relacin
. Por ejemplo,

Solucin: La definicin de

que se verifique si

es

es el mximo comn divisor de

2.5. Longitud de una lista

23

2.5. Longitud de una lista


Ejercicio 2.5 Definir la relacin
ejemplo

Solucin: La definicin de

Nota: La relacin

que se verifique si

es la longitud de la lista . Por

es

se corresponde con la relacin definida

2.6. Lista de nmeros acotada por su longitud


Ejercicio 2.6 Una lista est acotada si todos sus elementos son menores que su longitud. Definir la relacin
que se verifique si todos los elementos de la lista de nmeros son menores que la
longitud de . Por ejemplo,

Solucin: La definicin de

donde
menores que . Por ejemplo,

y est definida por

es

se verifica si todos los elementos de la lista de nmeros

son

24

Captulo 2. Aritmtica

2.7. Mximo de una lista de nmeros


Ejercicio 2.7 Definir la relacin
nmeros . Por ejemplo,

Solucin: La definicin de

que se verifique si

es el mximo de la lista de

es

2.8. Suma de los elementos de una lista


Ejercicio 2.8 Definir la relacin
la lista de nmeros . Por ejemplo,

que se verifique si

Solucin: La definicin de

Nota: La relacin

es la suma de los elementos de

es

se corresponde con la relacin definida

2.9. Lista de nmeros ordenada


Ejercicio 2.9 Definir la relacin
manera creciente. Por ejemplo,

Solucin: La definicin de

que se verifique si la lista de nmeros

es

est ordenada de

2.10. Suma parcial de una lista

25

2.10. Suma parcial de una lista


Ejercicio 2.10 Definir la relacin
de
tal que la suma de sus elementos es . Por ejemplo,

Solucin: Se presentan dos definiciones de


Primera solucin: Una definicin, usando

que se verifique si

.
(p. 19) y

Segunda solucin: Una definicin recursiva de

es un subconjunto

(p. 24), es

es

2.11. Lista de veces el nmero


Ejercicio 2.11 Definir la relacin
mentos son . Por ejemplo,

Solucin: La definicin de

donde
ejemplo,

que se verifique si

es la lista de longitud

cuyos ele-

es

se verifica si

es la lista de longitud

cuyos elementos son . Por

26

Captulo 2. Aritmtica

y se define por

2.12. Generacin de lista de nmeros


Ejercicio 2.12 Definir la relacin
nmeros desde N hasta M, ambos inclusive. Por ejemplo,

Solucin: La definicin de

que se verifica si L es la lista de los

es

Nota: La relacin

se corresponde con la definida

2.13. Intervalo entero


Ejercicio 2.13 Definir la relacin
. Por ejemplo,

Solucin: La definicin de

que se verifique si

es

es un nmero entero tal que

2.14. Ksimo elemento

27

Nota: La relacin

se corresponde con la definida

2.14. Ksimo elemento


Ejercicio 2.14 Definir la relacin
de la lista (se empieza a numerar en 1). Por ejemplo,

Solucin: La definicin de

Nota: La relacin

que se verifique si

es el simo elemento

es

se corresponde con la relacin definida

2.15. Multiplicacin de las ocurrencias de los elementos de una


lista
Ejercicio 2.15 Definir la relacin
repitiendo veces los elementos de la lista

Solucin: La definicin de

donde
el primer elemento de

que se verifica si

es la lista obtenida

. Por ejemplo,

es

se verifica si
es la lista obtenida repitiendo
veces los restantes elementos. Por ejemplo,

veces

28
Su definicin es

Captulo 2. Aritmtica

Captulo 3
Estructuras
3.1. Segmentos como objetos estructurados
Ejercicio 3.1 Supongamos que representamos los puntos del plano mediante trminos de la forma
donde
donde

son nmeros, y los segmentos del plano mediante trminos de la forma


y

son los puntos extremos del segmento. Definir las relaciones


y
que se verifiquen si el segmento es vertical (resp. horizontal). Por ejemplo,

Usar el programa para responder a las siguientes cuestiones:


1. Es vertical el segmento que une los puntos

2. Es vertical el segmento que une los puntos

3. Hay algn

tal que el segmento que une los puntos

sea vertical?

4. Hay algn

tal que el segmento que une los puntos

sea vertical?

5. Hay algn

tal que el segmento que une los puntos

sea horizontal?

6. Para qu puntos el segmento que comienza en

es vertical?

7. Hay algn segmento que sea horizontal y vertical?


Solucin: Las definiciones de

son
29

30

Captulo 3. Estructuras

Las respuestas a las preguntas son


1. Es vertical el segmento que une los puntos

2. Es vertical el segmento que une los puntos

3. Hay algn

tal que el segmento que une los puntos

sea vertical?

4. Hay algn

tal que el segmento que une los puntos

sea vertical?

5. Hay algn

tal que el segmento que une los puntos

sea horizontal?

6. Para qu puntos el segmento que comienza en

7. Hay algn segmento que sea horizontal y vertical?

es vertical?

3.2. Base de datos familiar

31

3.2. Base de datos familiar


Ejercicio 3.2 En este ejercicio vamos a trabajar con una base de datos familiar.
1. Representar la informacin relativa a las siguientes familias:
En la primera familia,
el padre es Toms Garca Prez, nacido el 7 de Mayo de 1960, trabaja de profesor y gana 60
euros diarios;
la madre es Ana Lpez Ruiz, nacida el 10 de marzo de 1962, trabaja de mdica y gana 90
euros diarios;
el hijo es Juan Garca Lpez, nacido el 5 de Enero de 1980, estudiante;
la hija es Mara Garca Lpez, nacida el 12 de Abril de 1992, estudiante.
En la segunda familia,
el padre es Jos Prez Ruiz, nacido el 6 de Marzo de 1963, trabaja de pintor y gana 120
euros diarios;
la madre es Luisa Glvez Prez, nacida el 12 de Mayo de 1964, trabaja de mdica y gana 90
euros diarios;
un hijo es Juan Luis Prez Prez, nacido el 5 de Febrero de 1990, estudiante;
una hija es Mara Jos Prez Prez, nacida el 12 de Junio de 1992, estudiante;
otro hijo es Jos Mara Prez Prez, nacido el 12 de Julio de 1994, estudiante.
2. Realizar las siguientes consultas:
existe familia sin hijos?
existe familia con un hijo?
existe familia con dos hijos?
existe familia con tres hijos?
existe familia con cuatro hijos.?
3. Buscar los nombres de los padres de familia con tres hijos.
4. Definir la relacin

que se verifique si

es un hombre casado.

5. Preguntar por los hombres casados.


6. Definir la relacin

que se verifique si

es una mujer casada.

7. Preguntar por las mujeres casadas.


8. Determinar el nombre de todas las mujeres casadas que trabajan.
9. Definir la relacin

que se verifique si

figura en alguna lista de hijos.

10. Preguntar por los hijos.


11. Definir la relacin

que se verifique si

es una persona existente en la base de datos.

32

Captulo 3. Estructuras

12. Preguntar por los nombres y apellidos de todas las personas existentes en la base de datos.
13. Determinar todos los estudiantes nacidos antes de 1993.
de forma que si

14. Definir la relacin


fecha de nacimiento.

es una persona, entonces

es su

15. Buscar todos los hijos nacidos en 1992.


16. Definir la relacin

que se verifique si el sueldo de la persona

es .

17. Buscar todas las personas nacidas antes de 1964 cuyo sueldo sea superior a 72 euros diarios.
de forma que si
18. Definir la relacin
los sueldos de las personas de la lista .

es una lista de personas, entonces

es la suma de

19. Calcular los ingresos totales de cada familia.


Solucin: Solucin del apartado 1: La representacin de la informacin sobre las dos familias es

3.2. Base de datos familiar


Solucin del apartado 2: Las consultas, y sus respuestas son,

Solucin del apartado 3:

Solucin del apartado 4:

Solucin del apartado 5:

Solucin del apartado 6:

Solucin del apartado 7:

33

34

Captulo 3. Estructuras
Solucin del apartado 8:

Solucin del apartado 9:

Solucin del apartado 10:

Solucin del apartado 11:

Solucin del apartado 12:

Solucin del apartado 13:

3.2. Base de datos familiar

Solucin del apartado 14:

Solucin del apartado 15:

Solucin del apartado 16:

Solucin del apartado 17:

Solucin del apartado 18:

35

36

Captulo 3. Estructuras

Solucin del apartado 19:

3.3. Autmata nodeterminista


Ejercicio 3.3 Consideremos el autmata representado por

3.3. Autmata nodeterminista

37
a

a
e1

e2

e4

e3
b

siendo

el estado final.

1. Representar el autmata utilizando las siguientes relaciones


que se verifica si

es el estado final.

que se verifica si se puede pasar del estado


que se verifica si se puede pasar del estado

al estado
al estado

usando la letra .
mediante un movi-

miento nulo.
2. Definir la relacin
. Por ejemplo,

que se verifique si el autmata, a partir del estado , acepta la lista

3. Determinar si el autmata acepta la lista

4. Determinar los estados a partir de los cuales el autmata acepta la lista

5. Determinar las palabras de longitud 3 aceptadas por el autmata a partir del estado
6. Definir la relacin
acepta la lista y la longitud de

que se verifique si el autmata, a partir del estado ,


es .

7. Buscar las cadenas aceptadas a partir de


8. Definir la relacin
acepta la lista y la longitud de

con longitud 3.

que se verifique si el autmata, a partir del estado ,


es menor o igual que .

9. Buscar las cadenas aceptadas a partir de

con longitud menor o igual 3.

38

Captulo 3. Estructuras
Solucin: Solucin del apartado 1:

Solucin del apartado 2:

Solucin del apartado 3:

Solucin del apartado 4:

Solucin del apartado 5:

Solucin del apartado 6: Presentamos dos definiciones. La primera usando

3.3. Autmata nodeterminista

39

La segunda definicin es una variacin de la definicin de acepta:

Nota: La primera definicin es ms simple y eficiente que la segunda como se observa en el


siguiente ejemplo

A partir de ahora, adoptaremos la definicin

Solucin del apartado 7:

Solucin del apartado 8: Presentamos dos definiciones. La primera usando

y la segunda modificando

40

Captulo 3. Estructuras

Nota: La primera definicin es ms simple y eficiente que la segunda como se observa en el


siguiente ejemplo

A partir de ahora, adoptaremos la definicin

Solucin del apartado 9:

3.4. El problema del mono y el pltano


Ejercicio 3.4 Un mono se encuentra en la puerta de una habitacin. En el centro de la habitacin hay un
pltano colgado del techo. El mono est hambriento y desea coger el pltano, pero no lo alcanza desde el
suelo. En la ventana de la habitacin hay una silla que el mono puede usar. El mono puede realizar las
siguientes acciones: pasear de un lugar a otro de la habitacin, empujar la silla de un lugar a otro de la
habitacin (si est en el mismo lugar que la silla), subirse en la silla (si est en el mismo lugar que la silla)
y coger el pltano (si est encima de la silla en el centro de la habitacin).
Definir la relacin
que se verifique si es una sucesin de acciones que aplicadas al
estado permiten al mono coger el pltano. Por ejemplo,

3.5. Movimientos del caballo del ajedrez

41

donde
significa que el mono se encuentra en la posicin (puerta, centro o ventana)
encima de (suelo o silla), la silla se encuentra en la posicin (puerta, centro o ventana) y el mono tiene
) o no ( =
) el pltano.
( =
Solucin:

La relacin
el
al

se verifica si en
se puede aplicar la accin y como resultado de su aplicacin se pasa
.

3.5. Movimientos del caballo del ajedrez


Ejercicio 3.5 Supongamos que los cuadros del tablero de ajedrez los representamos por pares de nmeros
con e entre y .
1. Definir la relacin
al cuadrado
cuadrado

que se verifica si el caballo puede pasar en un movimiento del


. Por ejemplo,

2. Definir la relacin
que se verifique si es una lista de cuadrados representando el camino
recorrido por un caballo sobre un tablero vaco. Por ejemplo,

42

Captulo 3. Estructuras
3. Usando la relacin
, escribir una pregunta para determinar los caminos de longitud 4 por los
que puede desplazarse un caballo desde cuadro
hasta el otro extremo del tablero ( = ) de forma
.
que en el segundo movimiento pase por el cuadro
4. Calcular el menor nmero de movimientos necesarios para desplazar el caballo del cuadro
. Cuntos caminos de dicha longitud hay de [1,1] a [2,2]?
Solucin: Solucin del apartado 1:

La relacin
verticales.

se verifica si un caballo puede moverse

La relacin

Solucin del apartado 2:

Solucin del apartado 3:

se verifica si

est entre 1 y 8.

espacios horizontales e

al

3.6. Mximo elemento de un rbol binario

43

Solucin del apartado 4:

3.6. Mximo elemento de un rbol binario


Ejercicio 3.6 Un rbol binario es vaco o consta de tres partes: la raz (que debe de ser un nmero positivo),
el subrbol izquierdo (que debe ser un rbol binario) y el subrbol derecho (que debe ser un rbol binario).
Usaremos la siguiente representacin
representa el rbol vaco
representa el rbol de la raz , subrbol izquierdo
Por ejemplo,

Definir la relacin

y subrbol derecho .

representa el rbol

que se verifique si es el mximo de los nodos del rbol . Por ejemplo,

44

Captulo 3. Estructuras

Solucin: La definicin de

es

Captulo 4
Retroceso, corte y negacin
4.1. Ejemplos de uso del corte
Ejercicio 4.1

1. Definir la relacin

si

< , entonces = ;

si

si

de forma que:

< , entonces = ;

, entonces = .

2. Construir el rbol de deduccin correspondiente a la cuestin

3. Definir la relacin
las dos primeras clusulas.

a partir de la definicin de

, introduciendo un corte al final de

4. Construir el rbol de deduccin correspondiente a la cuestin

5. Construir el rbol de deduccin correspondiente a la cuestin

6. En el rbol anterior se observa que se efectan comparaciones innecesarias (por ejemplo, despus de
, efecta la comparacin
). Definir la relacin
suprimiendo
fallar la comparacin
en la definicin de
las comparaciones innecesarias.
7. Construir el rbol de deduccin correspondiente a la cuestin

8. Construir el rbol de deduccin correspondiente a la cuestin

9. Definir la relacin

a partir de la definicin de
45

, suprimiendo los cortes.

46

Captulo 4. Retroceso, corte y negacin

10. Obtener las respuestas correspondientes a la cuestin


Solucin: Solucin del apartado 1: La definicin de

es

Solucin del apartado 2: El rbol de deduccin se muestra en la figura 4.1 (pgina 46).
f(1,Y), 2<Y
{X/1, Y/4}

{X/1, Y/0}
{X/1, Y/2}
1<3, 2<0

3 =< 1, 1<6, 2<2


Fallo

6 =< 1, 2<4
Fallo

2<0
Fallo

Figura 4.1: rbol de resolucin del apartado 2


Solucin del apartado 3: La definicin de

es

Solucin del apartado 4: El rbol de deduccin se muestra en la figura 4.2 (pgina 47).
Solucin del apartado 5: El rbol de deduccin se muestra en la figura 4.3 (pgina 47).
Solucin del apartado 6: La definicin de
es

Solucin del apartado 7: El rbol de deduccin se muestra en la figura 4.4 (pgina 47).
Solucin del apartado 8: El rbol de deduccin se muestra en la figura 4.5 (pgina 48).
es
Solucin del apartado 9: La definicin de

4.1. Ejemplos de uso del corte

47

f_1(1,Y), 2<Y
{X/1, Y/0}

1<3, !, 2<0

!, 2<0

2<0
Fallo

Figura 4.2: rbol de resolucin del apartado 4

f_1(7,Y)
{X/7, Y/4}

{X/7, Y/0}
{X/7, Y/2}
7<3, !

3 =< 7, 7<6, !

6 =< 7

Fallo
7<6, !
Fallo

Exito
{Y/4}

Figura 4.3: rbol de resolucin del apartado 5

f_1(7,Y)
{X/7, Y/4}

{X/7, Y/0}
{X/7, Y/2}
7<3, !

7<6, !

Fallo

Fallo

Exito
{Y/4}

Figura 4.4: rbol de resolucin del apartado 7

48

Captulo 4. Retroceso, corte y negacin


f_2(1,Y), 2<Y
{X/1, Y/0}

1<3, !, 2<0

!, 2<0

2<0
Fallo

Figura 4.5: rbol de resolucin del apartado 8


Solucin del apartado 10: Las respuestas son

4.2. rboles de deduccin de


Ejercicio 4.2 La relacin

est definida por

Escribir los rboles de SLD resolucin correspondientes a las siguientes preguntas


1.
2.
3.
Solucin:

4.3. Diferencia de conjuntos


Ejercicio 4.3 Definir la relacin
conjuntos
y . Por ejemplo,

que se verifique si

es la diferencia de los

4.3. Diferencia de conjuntos


memberchk(X,[a,b,c]), X=a.

49
memberchk(X,[a,b,c]), X=b.
{X/a}

{X/a}

X=b, memberchk(X,[a,b,c]).
{X/b}

!, a=a.

!, a=b.

memberchk(b,[a,b,c]).

a=a

a=b

memberchk(b,[b,c]).

Fallo
!

Resp.: X=a

Resp.: X=b

Figura 4.6: rbol de resolucin

Definir una versin con negacin (


cia de las distintas definiciones con el ejemplo

Nota: La relacin

se corresponde con la relacin definida

Solucin: 1a definicin (con negacin):

2a definicin (con corte):

) y otra con corte (

) y comparar la eficien-

50

Captulo 4. Retroceso, corte y negacin


3a definicin (con corte y memberchk):

Comparaciones:

4.4. Agregacin de un elemento a un conjunto


Ejercicio 4.4 Definir la relacin
dole a , si no pertenece a y es

que se verifique si
en caso contrario. Por ejemplo,

Hacer una versin con negacin y otra con corte.


Solucin: 1a definicin (con negacin):

2a definicin (con corte):

es la lista obtenida aadin-

4.5. Separacin de una lista de nmeros en positivos y negativos

51

4.5. Separacin de una lista de nmeros en positivos y negativos


Ejercicio 4.5 Definir la relacin
formada por los nmeros positivos y

que separa la lista de nmeros


en dos listas:
formada por los nmeros negativos o cero. Por ejemplo,

Proponer dos soluciones, una sin corte y otra con corte.


Solucin: Definicin con negacin:

Definicin con corte:

4.6.

Suma de los nmeros pares de una lista de nmeros

Ejercicio 4.6 Definir la relacin


pares de la lista de nmeros . Por ejemplo,

Hacer una versin con negacin y otra con corte.


Solucin:
Versin 1 (con negacin):

que se verifica si es la suma de todos los nmeros

52

Captulo 4. Retroceso, corte y negacin

Versin 2 (con corte):

Versin 3 (con corte y acumulador):

4.7. Exponente de dos en la factorizacin de un nmero


que se verifica si
Ejercicio 4.7 Definir la relacin
la descomposicin de como producto de factores primos. Por ejemplo,

es el exponente de 2 en

4.8. Transformacin de lista a conjunto

53

Hacer una versin con negacin y otra con corte.


Solucin: 1a Versin (con negacin):

2a Versin (con corte):

4.8. Transformacin de lista a conjunto


que se verifique si es el conjunto corresEjercicio 4.8 Definir la relacin
pondiente a la lista (es decir, contiene los mismos elementos que en el mismo orden, pero si tiene
elementos repetidos slo se incluye en la ltima aparicin de cada elemento). Por ejemplo,

Nota: La relacin
Solucin: La definicin de

se corresponde con la relacin definida


es

La definicin anterior puede simplificarse con cortes

54

Captulo 4. Retroceso, corte y negacin

3a definicin (con corte y memberchk):

Comparaciones:

4.9. Signos de crecimientos de sucesiones numricas


Ejercicio 4.9 Definir la relacin
que se verifique si es la lista correspondientes a los crecimientos de la lista numrica ; es decir, entre cada par de elementos consecutivos e de
coloca el signo si
e y signo en caso contrario. Por ejemplo,

Dar una definicin sin corte y otra con corte.


Solucin: La definicin de

sin usar corte es

4.10. Descomposicin en factores primos


La definicin de

55

usando corte es

4.10. Descomposicin en factores primos


Ejercicio 4.10 Definir las siguientes relaciones:
que se verifique si

es el menor divisor de

mayor o igual que 2.

Por ejemplo,

que se verifique si es la lista correspondiente a la descomposicin del nmero en factores primos (se considera los que elementos de estn ordenados de manera creciente).
Por ejemplo,

Solucin: La definicin de

La definicin de

es

es

56

Captulo 4. Retroceso, corte y negacin

4.11. Menor elemento que cumple una propiedad


que se verifique si
Ejercicio 4.11 Definir la relacin
que la suma de sus dgitos es mayor que . Por ejemplo,

Solucin: La definicin de

La relacin

La relacin
ejemplo,

es el menor mltiplo de

tal

es

se verifica si

es un mltiplo de . Por ejemplo,

se verifica si

es la suma de los dgitos del nmero . Por

4.12. Nmeros libres de cuadrados

57

4.12. Nmeros libres de cuadrados


Ejercicio 4.12 Un nmero es libre de cuadrados si no es divisible por el cuadrado de ningn nmero mayor
que 1. Definir la relacin
que se verifique si el nmero es libre de cuadrados.
Por ejemplo,

Solucin: La definicin de

es

4.13. Suma de los nmeros libres de cuadrados


Ejercicio 4.13 Definir la relacin
de los nmeros libres de cuadrados la lista numrica . Por ejemplo,

que se verifique si

Nota: Dar dos definiciones, una con negacin y otra con corte.
Solucin: La definicin de

y la definicin usando corte es

usando la negacin es

es la suma

58

Captulo 4. Retroceso, corte y negacin

4.14. Mximo nmero de una lista


Ejercicio 4.14 Definir la relacin
. Por ejemplo,

Solucin: La definicin de

que se verifique si

es el mayor nmero de la lista

es

4.15. Longitud de las subsucesiones comunes maximales


Ejercicio 4.15 Definir la relacin
subsucesiones comunes maximales de las listas

que se verifique si
. Por ejemplo,

es la longitud de las

ya que
es una subsucesin de las dos listas y no poseen ninguna otra subsucesin comn de
mayor longitud. Obsrvese que los elementos de la subsucesin no son necesariamente elementos adyacentes
en las listas.
Solucin: La definicin de

es

4.16. Elementos repetidos en una lista

59

4.16. Elementos repetidos en una lista


Ejercicio 4.16 Definir la relacin
ocurre ms de una vez) en la lista . Por ejemplo,

Solucin: La definicin de

Ejercicio 4.17 Defimir la relacin


nando todas las ocurrencias de en la lista

Solucin: La definicin de

Ejercicio 4.18 Definir la relacin


repetidos de la lista . Por ejemplo,

Solucin: La primera definicin de

que se verifique si el elemento

est repetido (i.e.

es

que se verifique si

es la lista obtenida elimi-

. Por ejemplo,

es

que se verifique si

es

es la lista de los elementos

60

Captulo 4. Retroceso, corte y negacin

con cortes se transforma en

4.17. Subconjunto maximal


Ejercicio 4.19 Definir la relacin
junto maximal de
(es decir, es un conjunto de elementos de
no pertenece a ). Por ejemplo,

Solucin: La definicin de

Nota: La relacin
la pgina 53.

que se verifica si
es un subcontal que slo existe un elemento de
que

es

se corresponde con la relacin

definida en

4.18. Suma de los elementos con posiciones mltiplos de n


que se verifique si
Ejercicio 4.20 Definir la relacin
elementos de la lista que ocupan las posiciones que son mltiplos de . Por ejemplo,

Solucin: La definicin de

es

es la suma de los

4.19. Compresin de listas

61

donde
se verifica si
lista
a partir del elemento . Por ejemplo,

La definicin de

es el elemento simo de

es la

es

4.19. Compresin de listas


Ejercicio 4.21 Definir la relacin
tuyendo cada sucesin de un elemento de

que se verifique si
por dicho elemento. Por ejemplo,

es la lista obtenida susti-

Solucin: Vamos a presentar dos definiciones. La primera definicin de

En la segunda definicin se usa el corte

es

62

Captulo 4. Retroceso, corte y negacin

4.20. Empaquetamiento de listas


Ejercicio 4.22 Definir la relacin
tituyendo cada sucesin de un elemento de

que se verifique si
es la lista obtenida suspor la lista formada por dicha sucesin. Por ejemplo,

Solucin: La definicin de

es

La relacin
todas las ocurrencias iniciales de y
en ; por ejemplo,

La definicin de

se verifica si es la lista obtenida eliminando en


es la lista formada por y las ocurrencias iniciales de

es

La definicin anterior puede transformarse introduciendo corte en

4.21. Codificacin por longitud


Ejercicio 4.23 Definir la relacin
que se verifique si
es la codificacin por
se codifican por trminos de
longitud de la lista ; es decir, las sucesiones de un mismo elemento de
donde es la longitud de la sucesin. Por ejemplo,
la forma

4.22. Codificacin reducida por longitud


(Indicacin: Usar la relacin

(4.20)).

Solucin: La definicin de

es

La relacin
forma
de
. Por ejemplo.

La definicin de

63

),

se verifica si, suponiendo que


es una lista de la
es la lista
donde es la longitud

es

4.22. Codificacin reducida por longitud


que se verifique si
es la codificaEjercicio 4.24 Definir la relacin
cin reducida por longitud de la lista ; es decir, las sucesiones de un mismo elemento de
se codifican
por trminos de la forma
donde es la longitud de la sucesin cuando es mayor que 1 y por cuando
es igual a 1. Por ejemplo,

(Indicacin: Usar la relacin

(4.21)).

Solucin: La definicin de

es

La relacin
se verifica si es la lista obtenida transformando los elementos de
de la forma
por y dejando los restantes elementos de la misma
forma (se supone que
es una lista de la forma
). Por ejemplo,

La definicin de

es

64

Captulo 4. Retroceso, corte y negacin

La definicin anterior puede simplificarse introduciendo un corte:

4.23. Decodificacin de lista


Ejercicio 4.25 Definir la relacin
cuya codificacin reducida por longitud es

Solucin: La definicin de

que, dada la lista

, devuelve la lista

. Por ejemplo,

es

4.24. Codificacin reducida directa


Ejercicio 4.26 Definir la relacin
reducida de
(es decir, las sucesiones de un mismo elemento

de

que se verifica si es la codificacin


se codifican por trminos de la forma

4.24. Codificacin reducida directa

65

donde es la longitud de la sucesin cuando es mayor que 1 y por cuando es igual a 1), pero en su
definicin no se crean listas de elementos repetidos como en la definicin de
. Por
ejemplo,

Solucin: La definicin de

es

La relacin
se verifica si es el nmero de veces que apay
es el resto de la lista
cuando se le quita la sucesin de
rece en la cabeza de la lista
elementos de su cabeza. Por ejemplo,

La definicin de

es

La definicin anterior puede simplificarse con cortes:

La relacin
elemento (es decir,

La definicin de

es

si

es

se verifica si es el trmino correspondiente al nmero y al


es 1 y es
en otro caso). Por ejemplo,

66

Captulo 4. Retroceso, corte y negacin

La definicin anterior puede simplificarse con cortes:

4.25. Cota superior de una lista de nmeros


que se verifique si
Ejercicio 4.27 Definir la relacin
(es decir, todos los elementos de son menores o iguales que ). Por ejemplo,

es una cota superior de

Dar dos definiciones, una recursiva y la otra no recursiva.


Solucin: La definicin recursiva de

La definicin no recursiva de

es

es

Mediante el siguiente ejemplo se compara la eficiencia de las dos definiciones

4.26. Dientes de sierra

67

4.26. Dientes de sierra


Ejercicio 4.28 Definir la relacin
que se verifique si se compone de una lista
de nmeros estrictamente creciente hasta un cierto nmero que llamaremos cima, de la cima y de una
de nmeros estrictamente decreciente. Las listas tiene
y
tienen que ser no vacas y la cima
lista
es el mayor elemento de . Por ejemplo,

Las listas que poseen esta forma de descomposicin se llaman dientes.


Solucin: La definicin de

La relacin

La relacin

es

se verifica si la lista de nmeros

es estrictamente creciente.

se verifica si la lista de nmeros

es estrictamente decreciente.

Ejercicio 4.29 Una sierra es una lista numrica compuesta por la yuxtaposicin de dientes. Ntese que
dos dientes consecutivos deben compartir un elemento. Por ejemplo [1,2,1,3,1] es una sierra compuesta por
los dientes [1,2,1] y [1,3,1], pero [1,2,1,1,3,1] no es una sierra.
que se verifique si es una sierra y
es la lista
Definir la relacin
de los dientes de . Por ejemplo,

68

Captulo 4. Retroceso, corte y negacin

Solucin: La definicin de

es

El corte aumenta la eficiencia como se aprecia en el siguiente ejemplo con la definicin con corte

y el mismo ejemplo con la definicin sin el corte

Captulo 5
Programacin lgica de segundo orden
5.1. Determinacin de un nmero por su factorial
Ejercicio 5.1 Definir la relacin
Por ejemplo,

que se verifique si

es el factorial de .

Solucin: Presentamos tres definiciones y comparamos su eficicencia.


La primera definicin usa un acumulador para almacenar los candidatos de la solucin.

La relacin
igual que cuyo factorial es .

La relacin

se verifica si

se verifica si

es el factorial de .

69

es el menor nmero mayor o

70

Captulo 5. Programacin lgica de segundo orden

La segunda definicin se diferencia de la anterior en que almacena en memoria los factoriales


de los candidatos considerados.

La relacin
igual que cuyo factorial (con memoria) es .

se verifica si

La relacin
se verifica si
en la base de datos internas los factoriales calculados.

es el menor nmero mayor o

es el factorial de . Adems almacena

En la tercera definicin se utiliza dos acumuladores para almacenar el candidato y el factorial


del candidato anterior.

La relacin
forma que si A = 1 entonces X = N!).

se verifica si X = A ( A + 1) N (de

5.2. rbol de resolucin y definiciones equivalentes

71

En los siguientes ejemplos se compara la eficiencia.

5.2. rbol de resolucin y definiciones equivalentes


Ejercicio 5.2 Se piden los siguientes apartados:
1. Dibujar el rbol de resolucin correspondiente al programa

y al objetivo

2. Explicar la relacin que hay entre

cuando se verifica

3. Dar una definicin no recursiva del predicado

Solucin:
1. El rbol de resolucin est en la figura 5.1 (pgina 72).
2. la relacin
4.

se verifica si

es la lista de los elementos de

que son mayores que

72

Captulo 5. Programacin lgica de segundo orden

p([5,1,6],B0)
2 {X1/5,
A1/[1,6],
B0/[5|B1]}

5 > 4, !,
p([1,6],B1)
!,
p([1,6],B1)
2 {X3/1,
A3/[6],
B1/[1|B3]}

3 {X3/1,
A3/[6],
B3/B1}

1 > 4, !,
p([6],B3)
Fallo

p([6],B1)
2 {X4/6,
A4/[],
B1/[6|B4]}
6 > 4, !,
p([],B4)

!,
p([],B4)

p([],B4)
1 {B4/[]}
B = B0 = [5|B1] = [5,6|B4] = [5,6]

Figura 5.1: rbol de resolucin

5.3. Nodos de una generacin en una lista de rboles binarios


3. Una definicin no recursiva de

73

es

5.3. Nodos de una generacin en una lista de rboles binarios


Ejercicio 5.3 Un rbol binario es vaco o consta de tres partes: la raz (que debe de ser un nmero positivo),
el subrbol izquierdo (que debe ser un rbol binario) y el subrbol derecho (que debe ser un rbol binario).
Usaremos la siguiente representacin
representa el rbol vaco
representa el rbol de la raz , subrbol izquierdo
Por ejemplo,

Definir la relacin
de la lista de rboles

representa el rbol

que se verifique si

es la lista de nodos de la generacin

. Por ejemplo,

Solucin: La definicin de

donde
rboles

y subrbol derecho .

es

se verifica si
eliminando sus raices. Por ejemplo,

es la lista de los rboles obtenidos de la lista de

74

Captulo 5. Programacin lgica de segundo orden

La definicin de

es

5.4. Lista de elementos nicos


Ejercicio 5.4 Definir la relacin
ocurren solamente una vez en la lista

Solucin: La definicin de

donde la relacin
en la lista . Por ejemplo,

que se verifique si
. Por ejemplo,

es la lista de los elementos que

es

se verifica si

es un elemento que ocurre solamente una vez

5.5. Elementos ms frecuentes de una lista


Ejercicio 5.5 Definir el predicado
que se verifique si
que aparecen el mayor nmero de veces. Por ejemplo,

Solucin: La definicin de

es

es la lista de los elementos de

5.6. Problema 3n + 1

75

La relacin
la lista . Por ejemplo,

La definicin de

se verifica si

es el nmero de veces que aparece el elemento

en

es

5.6. Problema 3n + 1
Ejercicio 5.6 Consideremos la funcin siguiente definida sobre los nmeros naturales:
!
3x + 1, si x es impar;
f (x) =
x/2,
si x es par
se pide:
1. Definir la relacin
que se verifique si
n
n
f ( f (X )), . . . , f (X ) tal que f (X ) = 1. Por ejemplo,

es la lista de los elementos X, f (X ),

se llama la sucesin generada por .


que se verifica si la lista de pares
2. Definir la relacin
de 1 a y es la longitud de sucesin generada por . Por ejemplo,

donde es un nmero

76

Captulo 5. Programacin lgica de segundo orden


3. Definir la relacin
que se verifica si es un par de la forma
donde
es un nmero entre 1 y tal que la longitud de la sucesin generada por es la ms larga de las
sucesiones generadas por 1,2,. . . , y es la longitud de dicha sucesin. Por ejemplo,

4. Definir
la longitud de la sucesin generada por

Solucin: La relacin

que se verifique si es el menor nmero natural tal que


es mayor que . Por ejemplo,

se verifica si

Solucin del apartado 1: La definicin de

es

Solucin del apartado 2: Presentamos dos definiciones de


es recursiva.
La primera definicin de

La segunda definicin de

, usando

, es

5.7. Nmeros perfectos

77

Solucin del apartado 3: La definicin de

es

Solucin del apartado 4: La definicin de

es

5.7. Nmeros perfectos


En los ejercicio de esta seccin estudiamos los nmeros perfectos (es decir, iguales a la suma
de sus divisores propios) y conceptos relacionados.
Ejercicio 5.7 Definir la relacin
los divisores propios del nmero . Por ejemplo,

Solucin: La definicin de

Ejercicio 5.8 Definir la relacin


los divisores propios del nmero . Por ejemplo,

que se verifique si es la lista ordenada de

es

que se verifique si

es la suma de

78

Captulo 5. Programacin lgica de segundo orden


Solucin: La definicin de

La relacin

es

se verifica si

es la suma de los elementos de la lista .

Ejercicio 5.9 Clasificamos los nmeros naturales en tres tipos:


es de tipo a si

es mayor que la suma de sus divisores propios

es de tipo b si

es igual que la suma de sus divisores propios

es de tipo c si

es menor que la suma de sus divisores propios

Definir la relacin

) que se verifique si

Solucin: La definicin de

es

Ejercicio 5.10 Definir la relacin


ros comprendidos entre 1 y . Por ejemplo,

Solucin: La definicin de

es el tipo del nmero . Por ejemplo,

que se verifique si es la lista de tipos de los nme-

es

5.7. Nmeros perfectos

79

Ejercicio 5.11 Definir la relacin


de nmeros naturales menores o iguales que

Solucin: La definicin de

que se verifique si , y son las cantidades


de tipo a, b y c, respectivamente. Por ejemplo,

es

Ejercicio 5.12 Definir la relacin


que se verifique si es el menor nmero tal que la cantidad de nmeros naturales menores o iguales que de tipo a es . Por ejemplo,

Solucin: La definicin de

es

80

Captulo 5. Programacin lgica de segundo orden

5.8. Determinacin de tringulos equilteros


Ejercicio 5.13 Un polgono se representa por su nombre y las longitudes de sus lados. Definir la relacin
que se verifica si el polgono es equiltero (es decir, que todos sus lados son iguales).
Por ejemplo,

Solucin: La definicin de

La relacin

es

est definida en la pgina 17.

5.9. Operacin binaria aplicada a listas


Ejercicio 5.14 Definir la relacin
obtenida aplicando la operacin binaria
ejemplo,

Nota: Se supone que

a los elementos de

que se verifica si
es la lista
que ocupan la misma posicin. Por

tienen la misma longitud)

Solucin: La definicin de

es

5.10. Nmeros en un trmino


Ejercicio 5.15 Definir la relacin
que que se verifique si
nmeros que ocurren en el trmino cerrado . Por ejemplo,

es el conjunto de todos los

5.11. Palabra sin vocales

81

Solucin: La definicin de

es

La relacin
trminos . Por ejemplo,

La definicin de

se verifica si

es el conjunto de nmeros en la lista de

es

5.11. Palabra sin vocales


Ejercicio 5.16 Definir la relacin
obtiene al eliminar todas las vocales de la palabra

Solucin: La definicin de

La relacin

que se verifique si

es la palabra que se

. Por ejemplo,

es

se verifica si

es la lista de los cdigos ASCII de las vocales.

82

Captulo 5. Programacin lgica de segundo orden

5.12. Palabras maximales


Ejercicio 5.17 Definir la relacin
Por ejemplo,

Solucin: La definicin de

que se verifique si

es la longitud de la palabra .

es

Ejercicio 5.18 Definir la relacin


que se verifique si es una palabra maximal
(es decir, de mxima longitud) de la lista de palabras . Por ejemplo,

Solucin: La definicin de

Ejercicio 5.19 Definir la relacin


palabras maximales de la lista de palabras

Solucin: La definicin de

es

que se verifique si

es la lista de las

. Por ejemplo,

es

5.13. Clausura transitiva de una relacin


Ejercicio 5.20 La clausura transitiva de una relacin binaria R es la menor relacin transitiva que contiene
a R; por ejemplo, la clausura transitiva de {(a, b), (b, c)} es {(a, b), (b, c), (a, c)}. Definir el predicado
que se verifique si
est en la clausura transitiva de la relacin .
Por ejemplo, suponiendo que se han definido las relaciones y por

5.14. Traduccin de cifras a palabras

83

se tiene

Solucin: La definicin de

es

5.14. Traduccin de cifras a palabras


Ejercicio 5.21 Definir la relacin
correspondientes a los dgitos de la lista

(Indicacin: Usar la relacin auxiliar

que se verifique si

es la lista de palabras

. Por ejemplo,

que se verifica si

Solucin: La definicin de la relacin auxiliar

es

es el nombre del dgito ).

84

Captulo 5. Programacin lgica de segundo orden


Se presentan tres definiciones de
Primera solucin: Una definicin de

Segunda solucin: Una definicin de

Tercera solucin: Una definicin de

, por recursin en

usando

usando

, es

es

es

5.15. Transformacin de lista dependiente de la posicin


Ejercicio 5.22 Definir la relacin
mndole a cada elemento numrico de

que se verifique si
su posicin en la lista. Por ejemplo,

es la lista obtenida su-

Dar dos definiciones, una recursiva y otra norecursiva.


Solucin: La definicin de recursiva de

donde
mento numrico de

la suma de

es

se verifica si
es la lista obtenida aadindole a cada eley su posicin en la lista. Por ejemplo,

5.16. Aplanamiento de listas

85

La definicin no recursiva de

donde
a la lista

es

se verifica si

es la lista de posiciones correspondiente

. Por ejemplo,

y
se verifica si es la suma de y el nmero , cuando es un nmero y es igual
a , en caso contrario. Por ejemplo,

5.16. Aplanamiento de listas


Ejercicio 5.23 Definir la relacin
zando, recursivamente, cada lista de

que se verifique si
por sus elementos. Por ejemplo,

es la lista obtenida reempla-

Solucin: Para definir


vamos a generalizar su dominio de forma que si
una lista, entonces es la lista cuyo nico elemento es .

no es

86

Captulo 5. Programacin lgica de segundo orden

Captulo 6
Estilo y eficiencia en programacin lgica
6.1. Nmero de Hardy
En cierta ocasin, el matemtico Ramanujan estaba en un hospital en Inglaterra y su amigo
Hardy fue a visitarlo. Hardy coment que haba llegado al hospital en un taxi de matrcula N y
esperaba que ste no fuese un mal presagio, ya que N era un nmero poco interesante. Ramanujan
no estuvo de acuerdo ya que inmediatamente dijo que N tiene una propiedad muy especial: N es
el menor entero positivo que puede descomponerse de dos maneras distintas como suma de dos
cubos.
El objetivo de esta seccin es averiguar la matrcula del taxi que llev a Hardy a visitar a
Ramanujan.
Ejercicio 6.1 Definir la relacin

que se verifique si

es el cubo de un entero. Por ejemplo,

Solucin: Presentaremos distintas definiciones y comentaremos su eficiencia.


La primera solucin realiza una bsqueda desde 1 hasta N.

La segunda solucin realiza una bsqueda desde 1 hasta

N.

La tercera solucin utiliza predicados aritmticos predefinidos.


87

88

Captulo 6. Estilo y eficiencia en programacin lgica

Para comparar la eficiencia realizamos los siguientes experimentos:

Se observa que la ms eficiente es la tercera definicin. La segunda se aproxima a la segunda. La


primera es muy ineficiente. En lo que sigue adoptaremos la tercera como definicn de
.

Ejercicio 6.2 Definir la relacin


que se verifique si
suma es y, adems, es menor o igual que . Por ejemplo,

son dos cubos cuya

Solucin: Presentaremos distintas definiciones y comentaremos su eficiencia.


La primera definicin realiza una bsqueda en e .

La segunda definicin realiza la bsqueda en

y determina .

6.1. Nmero de Hardy

89

La tercera definicin realiza una bsqueda acotada.

Para comparar la eficiencia realizamos los siguientes experimentos:

Se observa que la ms eficiente es la tercera definicin. En lo que sigue adoptaremos la tercera


.
como definicin de

Ejercicio 6.3 Definir la relacin


que se verifique si
dos cubos exactamente de dos maneras distintas.

puede descomponerse en suma de

90

Captulo 6. Estilo y eficiencia en programacin lgica


Solucin: La definicin de

es

Ejercicio 6.4 Definir la relacin


que se verifique si es el menor entero positivo que satisface el
anterior. Cul es la la matrcula del taxi que llev a Hardy a visitar a Ramanujan?
predicado
Solucin: La definicin de

es

La matrcula del taxi que llev a Hardy a visitar a Ramanujan se calcula mediante la siguiente
consulta

Por tanto, la matrcula del taxi es 1729.

6.2. Subconjuntos de suma dada


Ejercicio 6.5 Definir la relacin
tal que la suma de los elementos de
junto de

que se verifique si

es un subcon-

es . Por ejemplo,

Solucin: Presentaremos cuatro definiciones y comparemos su eficiencia.


La primera definicin usa la relacin
definida en el ejercicio 1.17 (pgina 19).

6.2. Subconjuntos de suma dada


En la segunda definicin se adapta la definicin de
de sus elementos.

91
teniendo en cuenta la suma

En la tercera definicin se define de forma dinmica la relacin


que se verifica si es la lista de subconjuntos de tales que la suma de sus elementos es .

La cuarta definicin es una variacin de la anterior de forma que se intercambian los dos
primeros argumentos de
a fin de que el argumento sobre el que
se indexa sea .

92

Captulo 6. Estilo y eficiencia en programacin lgica

Para comparar la eficiencia se realizan los siguientes experimentos.

Se observa que la ms eficiente es la cuarta definicin.

6.3. Coloreado de mapas


donde es el nombre del
Ejercicio 6.6 Un mapa puede representarse mediante la relacin
mapa y es la lista de los pares formados por cada una de las regiones del mapa y la lista de sus regiones
vecinas. Por ejemplo, los mapas de la figura 6.1 se pueden representar por

6.3. Coloreado de mapas

93

b
e

c
f

a
e

b c d
f
k
h

g
g

Figura 6.1: Ejemplos de mapas


Definir la relacin
que se verifique si es una lista de pares formados por una
tal que las regiones vecinas tengan colores
regin del mapa y uno de los colores de la lista de colores
distintos. Por ejemplo,

Qu nmero de colores se necesitan para colorear el segundo mapa? De cuntas formas distintas puede
colorearse con dicho nmero?
Solucin: Presentamos dos definiciones y comparamos su eficiencia.
La primera definicin de
es por generacin y prueba.

En la segunda definicin de

se usa un acumulador y se adelanta las pruebas.

Para comparar las dos definiciones usaremos el segundo mapa.

94

Captulo 6. Estilo y eficiencia en programacin lgica

Se observa que la segunda es ms eficiente.


En el ejemplo anterior se observa que se puede colorear el segundo mapa con 4 colores.
Veamos si puede colorearse con 3 colores.

Por tanto, para colorear el segundo mapa se necesitan 4 colores.


El nmero de formas distintas de colorear el segundo mapa se calcula mediante la siguiente
consulta.

Captulo 7
Aplicaciones de programacin declarativa
7.1. Formacin de grupos minimales de asignaturas compatibles
se representa la informacin de los alumnos
Mediante la relacin
segn los cursos y asignaturas, de forma que es el curso, es la asignatura y es la lista de
los alumnos de dicha asignatura. A lo largo del ejercicio vamos a usar como ejemplo la siguiente
informacin.

Ejercicio 7.1 Definir la relacin


curso . Por ejemplo,

Solucin: La definicin de

que se verifique si

es

95

es la lista de asignaturas del

96

Captulo 7. Aplicaciones de programacin declarativa

Ejercicio 7.2 Definir la relacin


que se verifique si la lista de asignaturas es
incompatible (es decir, algn alumno est en las listas de clase de ms de una asignatura de la lista ). Por
ejemplo,

Solucin: La definicin de

es

Ejercicio 7.3 Definir la relacin


que verifique si la lista de grupos de asignaturas es incompatible (es decir, contiene algn grupo incompatible de asignaturas). Por ejemplo,

Solucin: La definicin de

es

Ejercicio 7.4 Definir la relacin


diendo como primer elemento de un elemento de
ejemplo,

Solucin: La definicin de

es

que se verifique si
es la lista obtenida aaes la lista obtenida aadiendo
a . Por

7.1. Formacin de grupos minimales de asignaturas compatibles

97

Ejercicio 7.5 Definir la relacin


que se verifique si es una particin de la lista
(es decir, un conjunto obtenido distribuyendo los elementos de en conjuntos no vacos y sin elementos
comunes). Por ejemplo,

Solucin: La definicin de

es

Ejercicio 7.6 Definir la relacin


es una particin compatible de las asignaturas del curso . Por ejemplo,

Solucin: La definicin de

Ejercicio 7.7 Definir la relacin


particin compatible de las asignaturas del curso
Por ejemplo,

es

que se verifique si es una


con el menor nmero posible de grupos de asignaturas.

Calcular las agrupaciones compatibles minimales del curso


Solucin: La definicin

que se verifique si

.
es

98

Captulo 7. Aplicaciones de programacin declarativa


Las agrupaciones compatibles minimales del curso

se calculan mediante la consulta

7.2. Simulacin de una calculadora bsica


El objetivo de los siguientes ejercicios es la simulacin de una calculadora bsica. Para ello
consideraremos que en cada momento la calculadora se encuentra en un determinado estado
caracterizado por una lista con cuatro elementos
donde
es el ltimo clculo efectuado,
es la ltima tecla activada,
es el ltimo operador activado y
es el valor impreso.
El estado inicial es

y est definido por

Las acciones posibles son pulsar un dgito, una operacin aritmtica o la de resultado y estn
definidas por

7.2. Simulacin de una calculadora bsica

99

En la siguiente tabla se muestran los estados de la calculadora correspondientes a las acciones


indicadas en la ltima columna
estado
tecla

Es decir, si se parte del estado inicial y se realizan las acciones

se obtiene como resultado el nmero

Ejercicio 7.8 Definir la relacin


aplicando la accin al estado ; es decir, si
Si

es un dgito, entonces
si

es un dgito,

en otro caso,
Si

que se verifique si
, entonces

es

es

es

no es un dgito, entonces
si

es una operacin,

en otro caso,
Por ejemplo,

es

es
.

es el estado obtenido

100

Captulo 7. Aplicaciones de programacin declarativa


Solucin: Presentamos tres definiciones.
La primera definicin de
es

La segunda definicin de

La tercera definicin de

es

es

7.2. Simulacin de una calculadora bsica

101

En lo que sige usaremos la primera.

Ejercicio 7.9 Definir la relacin


aplicando las acciones de la lista al estado

que se verifique si

es el estado obtenido

. Por ejemplo,

Solucin: La definicin de

es

Ejercicio 7.10 Definir la relacin


acciones. Por ejemplo,

que se verifique si

es una lista cuyos elementos son

Usarlo para calcular el nmero de posibles listas de acciones de longitud 3.


Solucin: La definicin de

El nmero

es

de listas de acciones de longitud 3 se calcula mediante la consulta

Ejercicio 7.11 Para realizar una operacin en la calculadora no todas las combinaciones de teclas (acciones)
son vlidas. Por ejemplo, no podemos teclear dos operaciones consecutivas o dividir por cero. La siguiente
relacin define las acciones vlidas

102

Captulo 7. Aplicaciones de programacin declarativa

En los apartados de este ejercicio se definen de las relaciones auxiliares.


1. Definir la relacin
un dgito.

que se verifique si el primer elemento de la lista

2. Definir la relacin
dos operaciones consecutivas.
3. Definir la relacin
bolo en una posicin que no es la ltima.
4. Definir la relacin
secutiva el smbolo

que se verifique si la lista

es

contiene

) que se verifique si la lista contiene el smque se verifique si en la lista

aparecen de manera con-

y un cero.

5. Definir la relacin
mos elementos son un dgito y el smbolo .

que se verifique si en la lista

Solucin:

Ejercicio 7.12 Calcular el nmero de posibles listas de acciones vlidas de longitud 3.

los lti-

7.3. Problema de las subastas


Solucin: El nmero
consulta

103

de listas de acciones vlidad de longitud 3 se calcula mediante la

Ejercicio 7.13 Definir la relacin


que se verifique si es una lista de
vlidas que aplicadas al estado inicial da como resultado el nmero . Por ejemplo,

acciones

Solucin:

7.3. Problema de las subastas


Ejercicio 7.14 En una subasta se hacen distintas ofertas. Cada oferta incluye un lote de productos y un
precio por dicho lote. Las ofertas realizadas se representan mediante la relacin
que se
representa la
verifica si es una oferta por el lote con un coste . Por ejemplo,
oferta en la que se puja por el lote compuesto por los objetos , y por un valor de
euros.
Para la aceptacin de las ofertas se observan las siguientes reglas:
No puede aceptar dos ofertas que contienen un mismo objeto en sus lotes.
Se prefieren las ofertas de mayor ganancia.
Definir la relacin
si las ofertas realizadas se definen por

que se verifique si

es una lista de ofertas aceptadas. Por ejemplo,

104

Captulo 7. Aplicaciones de programacin declarativa

entonces,

Solucin: La definicin de

es

La relacin
se verifica si es una lista de ofertas aceptable; es decir, una lista
de ofertas que no contienen objetos comunes en sus lotes. Por ejemplo, con la definicin anterior
,
de

La relacin
con la definicin anterior de

se verifica si es la lista de todas las ofertas. Por ejemplo,


,

7.3. Problema de las subastas

La relacin

105

se verifica si

es un subconjunto de

. Por ejemplo,

La relacin
se verifica si la lista de ofertas es aceptable; es decir, no
contiene ofertas con objetos comunes en sus lotes. Por ejemplo, con la definicin anterior de
,

La relacin
se verifica si es una lista de ofertas inaceptable; es decir, contiene ofertas con objetos comunes en sus lotes. Por ejemplo, con la definicin anterior de
,

106

La relacin
comunes. Por ejemplo,

La relacin
con la definicin anterior de

Captulo 7. Aplicaciones de programacin declarativa

se verifica si

se solapan; es decir, tienen elementos

se verifica si la ganancia de la lista de ofertas L es . Por ejemplo,


,

Bibliografa
[1] J. A. Alonso.

Introduccin a la programacin lgica con Prolog, 2006.


.

En

[2] J. A. Alonso.

Temas de Programacin declarativa (2005-06), 2006.


.

En

[3] K. R. Apt. From logic programming to Prolog. Prentice Hall, 1996.


[4] P. Blackburn, J. Bos, and K. Striegnitz. Learn Prolog Now!, 2001. En Bib y en Red.
[5] I. Bratko. Prolog Programming for Artificial Intelligence. AddisonWesley, 3 edition, 2001.
[6] W. F. Clocksin. Clause and Effect (Prolog Programming for the Working Programmer). Springer
Verlag, 1997.
[7] W. F. Clocksin and C. S. Mellish. Programming in Prolog. SpringerVerlag, 4 edition, 1994.
[8] M. A. Covington, D. Nute, and A. Vellino. Prolog Programming in Depth. Prentice Hall, 1997.
[9] Y. Deeville. Logic Programmng (Systematic Program Development). AddisonWesley, 1990.
[10] J. P. Delahaye. Cours de Prolog avec Turbo Prolog (Elments fondamentaux). Eyrolles, 1988.
[11] U. Nilsson and J. Maluszynski.

Logic, Programming and Prolog.


.

2 edition, 2000.

En

[12] R. A. OKeefe. The Cratf of Prolog. The MIT Press, 1990.


[13] P. Ross. Advanced Prolog: Techniques and Examples. Addison-Wesley, 1989.
[14] P. Schnupp, D. Merritt, and S. S. Muchnick. Adventure in Prolog. SpringerVerlag, 1990.
[15] L. Sterling and E. Shapiro. Lart de Prolog. Masson, 1990.
[16] T. Van Le. Techniques of Prolog Programming (with implementation of logical negation and quantified goals). John Wiley, 1993.

107

You might also like