SlideShare una empresa de Scribd logo
Ejercicios de programación declarativa
con Prolog
José A. Alonso Jiménez
Grupo de Lógica Computacional
Dpto. de Ciencias de la Computación e Inteligencia Artificial
Universidad de Sevilla
Sevilla, 1 de Enero de 2006 (Versión de 20 de septiembre de 2007)
2
Esta obra está bajo una licencia Reconocimiento–NoComercial–CompartirIgual 2.5 Spain
de Creative Commons.
Se permite:
copiar, distribuir y comunicar públicamente la obra
hacer obras derivadas
Bajo las condiciones siguientes:
Reconocimiento. Debe reconocer los créditos 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, sólo puede distribuir la obra generada bajo una licencia idéntica a
ésta.
Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos 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
Introducción 6
1. Operaciones con listas 9
1.1. Primer elemento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2. Resto de una lista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.3. Construcción de listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.4. Relación de pertenencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.5. Concatenación de listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.6. Lista inversa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.7. Palíndromo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.8. Último elemento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.9. Penúltimo elemento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.10. Selección de un elemento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.11. Inserción de un elemento en una lista . . . . . . . . . . . . . . . . . . . . . 17
1.12. Sublista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.13. Permutación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.14. Lista con todos sus elementos iguales . . . . . . . . . . . . . . . . . . . . . 18
1.15. Paridad de la longitud de una lista . . . . . . . . . . . . . . . . . . . . . . . 19
1.16. Rotación de un elemento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.17. Subconjunto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2. Aritmética 21
2.1. Máximo de dos números . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.2. Factorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.3. Sucesión de Fibonacci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.4. Máximo común divisor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.5. Longitud de una lista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.6. Lista de números acotada por su longitud . . . . . . . . . . . . . . . . . . . 23
2.7. Máximo de una lista de números . . . . . . . . . . . . . . . . . . . . . . . . 24
2.8. Suma de los elementos de una lista . . . . . . . . . . . . . . . . . . . . . . . 24
2.9. Lista de números ordenada . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3
4 Índice general
2.10. Suma parcial de una lista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.11. Lista de Æ veces el número Æ . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.12. Generación de lista de números . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.13. Intervalo entero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.14. K–ésimo elemento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.15. Multiplicación de las ocurrencias de los elementos de una lista . . . . . . . 28
3. Estructuras 31
3.1. Segmentos como objetos estructurados . . . . . . . . . . . . . . . . . . . . . 31
3.2. Base de datos familiar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.3. Autómata no–determinista . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.4. El problema del mono y el plátano . . . . . . . . . . . . . . . . . . . . . . . 44
3.5. Movimientos del caballo del ajedrez . . . . . . . . . . . . . . . . . . . . . . 45
3.6. Máximo elemento de un árbol binario . . . . . . . . . . . . . . . . . . . . . 47
4. Retroceso, corte y negación 49
4.1. Ejemplos de uso del corte . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.2. Árboles de deducción de Ñ Ñ Ö
 . . . . . . . . . . . . . . . . . . . . . . 53
4.3. Diferencia de conjuntos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.4. Agregación de un elemento a un conjunto . . . . . . . . . . . . . . . . . . . 55
4.5. Separación de una lista de números en positivos y negativos . . . . . . . . 56
4.6. Suma de los números pares de una lista de números . . . . . . . . . . . . 56
4.7. Exponente de dos en la factorización de un número . . . . . . . . . . . . . 58
4.8. Transformación de lista a conjunto . . . . . . . . . . . . . . . . . . . . . . . 58
4.9. Signos de crecimientos de sucesiones numéricas . . . . . . . . . . . . . . . 60
4.10. Descomposición en factores primos . . . . . . . . . . . . . . . . . . . . . . . 60
4.11. Menor elemento que cumple una propiedad . . . . . . . . . . . . . . . . . 61
4.12. Números libres de cuadrados . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.13. Suma de los números libres de cuadrados . . . . . . . . . . . . . . . . . . . 63
4.14. Máximo número de una lista . . . . . . . . . . . . . . . . . . . . . . . . . . 64
4.15. Longitud de las subsucesiones comunes maximales . . . . . . . . . . . . . 64
4.16. Elementos repetidos en una lista . . . . . . . . . . . . . . . . . . . . . . . . 65
4.17. Subconjunto maximal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
4.18. Suma de los elementos con posiciones múltiplos de n . . . . . . . . . . . . 67
4.19. Compresión de listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
4.20. Empaquetamiento de listas . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
4.21. Codificación por longitud . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
4.22. Codificación reducida por longitud . . . . . . . . . . . . . . . . . . . . . . . 70
4.23. Decodificación de lista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
4.24. Codificación reducida directa . . . . . . . . . . . . . . . . . . . . . . . . . . 72
4.25. Cota superior de una lista de números . . . . . . . . . . . . . . . . . . . . . 73
Índice general 5
4.26. Dientes de sierra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
5. Programación lógica de segundo orden 77
5.1. Determinación de un número por su factorial . . . . . . . . . . . . . . . . . 77
5.2. Árbol de resolución y definiciones equivalentes . . . . . . . . . . . . . . . 79
5.3. Nodos de una generación en una lista de árboles binarios . . . . . . . . . . 80
5.4. Lista de elementos únicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
5.5. Elementos más frecuentes de una lista . . . . . . . . . . . . . . . . . . . . . 83
5.6. Problema 3n + 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
5.7. Números perfectos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
5.8. Determinación de triángulos equiláteros . . . . . . . . . . . . . . . . . . . . 89
5.9. Operación binaria aplicada a listas . . . . . . . . . . . . . . . . . . . . . . . 90
5.10. Números en un término . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
5.11. Palabra sin vocales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
5.12. Palabras maximales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
5.13. Clausura transitiva de una relación . . . . . . . . . . . . . . . . . . . . . . . 92
5.14. Traducción de cifras a palabras . . . . . . . . . . . . . . . . . . . . . . . . . 93
5.15. Transformación de lista dependiente de la posición . . . . . . . . . . . . . 94
5.16. Aplanamiento de listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
6. Estilo y eficiencia en programación lógica 97
6.1. Número de Hardy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
6.2. Subconjuntos de suma dada . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
6.3. Coloreado de mapas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
7. Aplicaciones de programación declarativa 107
7.1. Formación de grupos minimales de asignaturas compatibles . . . . . . . . 107
7.2. Simulación de una calculadora básica . . . . . . . . . . . . . . . . . . . . . 110
7.3. Problema de las subastas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Bibliografía 121
Indice de definiciones 122
6 Índice general
Introducción
El objetivo del presente trabajo es presentar una colección de ejercicios para la asig-
natura “Programación declarativa” de tercer curso de la Ingeniería Informática.
Estos ejercicios complementa los apuntes de introducción a la programación decla-
rativa con Prolog ([1]) y a las transparencias de clase ([2]).
Todos los ejercicios se han comprobado usando la versión 5.6.18 de SWI Prolog.
7
8 Índice general
Capítulo 1
Operaciones con listas
Una lista es la lista vacía o se compone de un primer elemento y un resto, que es
una lista. En Prolog, la lista vacía se representa por ℄ y las listas no vacía son de la
forma Ä℄ donde es la cabeza y Ä es el resto.
1.1. Primer elemento
Ejercicio 1.1 Definir la relación ÔÖ Ñ ÖÓ´ ĸ µ que se verifique si es el primer elemento de
la lista Ä. Por ejemplo,
¹ ÔÖ Ñ ÖÓ´ ¸ ¸
℄¸ µº
Obtener las respuestas a las siguientes preguntas:
¹ ÔÖ Ñ ÖÓ´ ¸ ¸
℄¸ µº
¹ ÔÖ Ñ ÖÓ´ ¸ ℄¸ µº
¹ ÔÖ Ñ ÖÓ´ ¸ µº
Solución: La definición de ÔÖ Ñ ÖÓ es
ÔÖ Ñ ÖÓ´ ℄¸ µº
Las respuestas a las preguntas son
¹ ÔÖ Ñ ÖÓ´ ¸ ¸
℄¸ µº
¹ ÔÖ Ñ ÖÓ´ ¸ ¸
℄¸ µº
¹ ÔÖ Ñ ÖÓ´ ¸ ℄¸ µº
9
10 Capítulo 1. Operaciones con listas
¹ ÔÖ Ñ ÖÓ´ ¸ µº
℄
1.2. Resto de una lista
Ejercicio 1.2 Definir la relación Ö ×ØÓ´ Ľ¸ ľµ que se verifique si ľ es la lista obtenida a
partir de la lista Ľ suprimiendo el primer elemento. Por ejemplo,
¹ Ö ×ØÓ´ ¸ ¸
℄¸Äµº
Ä ¸ 
℄
Obtener las respuestas a las siguientes preguntas:
¹ Ö ×ØÓ´ Ä℄¸ ¸
℄µº
¹ Ö ×ØÓ´Ä¸ ¸
℄µº
Solución: La definición de Ö ×ØÓ es
Ö ×ØÓ´ Ä℄¸Äµº
Las respuestas a las preguntas son
¹ Ö ×ØÓ´ Ä℄¸ ¸
℄µº
Ä ¸ 
℄
¹ Ö ×ØÓ´Ä¸ ¸
℄µº
Ä ¸ ¸ 
℄
1.3. Construcción de listas
Ejercicio 1.3 Definir la relación 
ÓÒ×´ ¸ Ľ¸ ľµ que se verifique si ľ es la lista obtenida
añadiéndole a Ľ como primer elemento. Por ejemplo,
¹ 
ÓÒ×´ ¸ ¸
℄¸Äµº
Ä ¸ ¸ 
℄
Obtener las respuestas correspondientes a las siguientes preguntas:
¹ 
ÓÒ×´ ¸ ¸
℄¸ ¸ ¸
℄µº
¹ 
ÓÒ×´ ¸Ä¸ ¸ ¸
℄µº
¹ 
ÓÒ×´ ¸Ä¸ ¸ ¸
℄µº
¹ 
ÓÒ×´ ¸Ä¸ ¸ ¸
℄µº
1.4. Relación de pertenencia 11
Solución: La definición de 
ÓÒ× es

ÓÒ×´ ¸Ä¸ Ä℄µº
Las respuestas a las preguntas son
¹ 
ÓÒ×´ ¸ ¸
℄¸ ¸ ¸
℄µº
¹ 
ÓÒ×´ ¸Ä¸ ¸ ¸
℄µº
Ä ¸ 
℄
¹ 
ÓÒ×´ ¸Ä¸ ¸ ¸
℄µº
ÆÓ
¹ 
ÓÒ×´ ¸Ä¸ ¸ ¸
℄µº
Ä ¸ 
℄
1.4. Relación de pertenencia
Ejercicio 1.4 Definir la relación Ô ÖØ Ò 
 ´ ¸ ĵ que se verifique si es un elemento de la
lista Ä. Por ejemplo,
¹ Ô ÖØ Ò 
 ´ ¸ ¸ ¸
℄µº
×
¹ Ô ÖØ Ò 
 ´ ¸ ¸ ¸
℄µº
ÆÓ
Utilizar el programa para responder a las siguientes cuestiones:
1. ¿Es 
 un elemento de ¸
¸ ¸
℄?
2. ¿Cuáles son los elementos de ¸ ¸ ℄?
3. ¿Cuáles son los elementos comunes de ¸ ¸
℄, y ¸
¸ ℄?
Solución: La definición de Ô ÖØ Ò 
 ´ ¸Äµ, por recursión en Ä, es
Ô ÖØ Ò 
 ´ ¸ ℄µº
Ô ÖØ Ò 
 ´ ¸ Ä℄µ ¹
Ô ÖØ Ò 
 ´ ¸Äµº
Las respuesta a las preguntas son
1. ¿Es 
 un elemento de ¸
¸ ¸
℄?
12 Capítulo 1. Operaciones con listas
¹ Ô ÖØ Ò 
 ´
¸ ¸
¸ ¸
℄µº
×
2. ¿Cuáles son los elementos de ¸ ¸ ℄?
¹ Ô ÖØ Ò 
 ´ ¸ ¸ ¸ ℄µº
ÆÓ
3. ¿Cuáles son los elementos comunes de ¸ ¸
℄, y ¸
¸ ℄?
¹ Ô ÖØ Ò 
 ´ ¸ ¸ ¸
℄µ¸ Ô ÖØ Ò 
 ´ ¸ ¸
¸ ℄µº

ÆÓ
Nota: La relación Ô ÖØ Ò 
 se corresponde con la definida Ñ Ñ Ö.
1.5. Concatenación de listas
Ejercicio 1.5 Definir la relación 
ÓÒ
´ Ľ¸ ľ¸ Ä¿µ que se verifique si Ä¿ es la lista obtenida
escribiendo los elementos de ľ a continuación de los elementos de Ľ. Por ejemplo,
¹ 
ÓÒ
´ ¸ ℄¸ 
¸ ¸ ℄¸Äµº
Ä ¸ ¸ 
¸ ¸ ℄
Utilizar el programa para responder a las siguientes cuestiones:
1. ¿Qué lista hay que añadirle al lista ¸ ℄ para obtener ¸ ¸
¸ ℄?
2. ¿Qué listas hay que concatenar para obtener ¸ ℄?
3. ¿Pertenece a la lista ¸ ¸
℄?
4. ¿Es ¸
℄ una sublista de ¸ ¸
¸ ℄?
5. ¿Es ¸ ℄ una sublista de ¸ ¸
¸ ℄?
6. ¿Cuál es el último elemento de ¸ ¸
¸ ℄?
Solución: La definición de 
ÓÒ
´Ä½¸Ä¾¸Ä¿µ, por recursión en Ľ, es
1.5. Concatenación de listas 13

ÓÒ
´ ℄¸Ä¸Äµº

ÓÒ
´ Ľ℄¸Ä¾¸ Ä¿℄µ ¹

ÓÒ
´Ä½¸Ä¾¸Ä¿µº
Las repuestas a las cuestiones son
1. ¿Qué lista hay que añadirle al lista ¸ ℄ para obtener ¸ ¸
¸ ℄?
¹ 
ÓÒ
´ ¸ ℄¸Ä¸ ¸ ¸
¸ ℄µº
Ä 
¸ ℄
2. ¿Qué listas hay que concatenar para obtener ¸ ℄?
¹ 
ÓÒ
´Ä½¸Ä¾¸ ¸ ℄µº
Ľ ℄
ľ ¸ ℄
Ľ ℄
ľ ℄
Ľ ¸ ℄
ľ ℄
ÆÓ
3. ¿Pertenece a la lista ¸ ¸
℄?
¹ 
ÓÒ
´Ä½¸ ľ℄¸ ¸ ¸
℄µº
Ľ ℄
ľ 
℄
×
¹ 
ÓÒ
´ ¸ ℄¸ ¸ ¸
℄µº
×
4. ¿Es ¸
℄ una sublista de ¸ ¸
¸ ℄?
¹ 
ÓÒ
´ ¸ ¸
 ℄¸ ¸ ¸
¸ ℄µº
×
5. ¿Es ¸ ℄ una sublista de ¸ ¸
¸ ℄?
¹ 
ÓÒ
´ ¸ ¸ ℄¸ ¸ ¸
¸ ℄µº
ÆÓ
6. ¿Cuál es el último elemento de ¸ ¸
¸ ℄?
¹ 
ÓÒ
´ ¸ ℄¸ ¸ ¸
¸ ℄µº
14 Capítulo 1. Operaciones con listas
Nota: La relación 
ÓÒ
 se corresponde con la definida ÔÔ Ò .
1.6. Lista inversa
Ejercicio 1.6 Definir la relación ÒÚ Ö× ´·Ä½¸¹Ä¾µ que se verifique si ľ es la lista obtenida
invirtiendo el orden de los elementos de la lista Ľ. Por ejemplo,
¹ ÒÚ Ö× ´ ¸ ¸
℄¸Äµº
Ä 
¸ ¸ ℄
Solución: Vamos a presentar dos definiciones de ÒÚ Ö× ´Ä½¸Ä¾µ. Ambas son por
recursión en Ľ.
Primera solución: Usando la relación ÔÔ Ò , se define ÒÚ Ö× como
ÒÚ Ö× ½´ ℄¸ ℄µº
ÒÚ Ö× ½´ Ľ℄¸Ä¾µ ¹
ÒÚ Ö× ½´Ä½¸Ä¿µ¸
ÔÔ Ò ´Ä¿¸ ℄¸Ä¾µº
Segunda solución: Usando un acumulador, se define ÒÚ Ö× como
ÒÚ Ö× ¾´Ä½¸Ä¾µ ¹
ÒÚ Ö× ¾ ÙܴĽ¸Ä¾¸ ℄µº
La relación ÒÚ Ö× ¾ ÙÜ´·Ä½¸¹Ä¾¸·Ä¿µ se verifica si ľ es la lista obtenida aña-
diendo la inversa de Ľ a Ä¿ y se define por recursión en Ľ como sigue
ÒÚ Ö× ¾ ÙÜ´ ℄¸Ä¾¸Ä¾µº
ÒÚ Ö× ¾ ÙÜ´ Ľ℄¸Ä¾¸Ä¿µ ¹
ÒÚ Ö× ¾ ÙܴĽ¸Ä¾¸ Ä¿℄µº
Nota: La relación ÒÚ Ö× se corresponde con la relación definida Ö Ú Ö× .
1.7. Palíndromo
Ejercicio 1.7 Un palíndromo es una palabra que se lee igual en los dos sentidos, por ejemplo
“oso”. Definir la relación Ô Ð Ò ÖÓÑÓ´·Äµ que se verifique si la lista Ä es un palíndromo. Por
ejemplo,
1.8. Último elemento 15
¹ Ô Ð Ò ÖÓÑÓ´ Ӹ׸Ó℄µº
×
¹ Ô Ð Ò ÖÓÑÓ´ Ӹ׸ ℄µº
ÆÓ
Solución: La definición de Ô Ð Ò ÖÓÑÓ es
Ô Ð Ò ÖÓÑӴĵ ¹
Ö Ú Ö× ´Ä¸Äµº
1.8. Último elemento
Ejercicio 1.8 Definir la relación ÐØ ÑÓ´ ¸ ĵ que se verifique si es el último elemento de
la lista Ä. Por ejemplo,
¹ ÐØ ÑÓ´ ¸ ¸ ¸
¸ ℄µº
¹ ÐØ ÑÓ´ ¸Äµº
Ä ℄
Ä ¸ ℄
Ä ¸ ¸ ℄
×
Solución: Presentamos tres definiciones de ÐØ ÑÓ.
Primera solución: Usando ÔÔ Ò se define ÐØ ÑÓ por
ÐØ ÑÓ ½´ ¸Äµ ¹
ÔÔ Ò ´ ¸ ℄¸Äµº
Segunda solución: Usando Ö Ú Ö× se define ÐØ ÑÓ por
ÐØ ÑÓ ¾´ ¸Äµ ¹
Ö Ú Ö× ´Ä¸ ℄µº
Tercera solución: Una definición de ÐØ ÑÓ´ ¸Äµ por recursión en Ä es
ÐØ ÑÓ ¿´ ¸ ℄µº
ÐØ ÑÓ ¿´ ¸ Ä℄µ ¹
ÐØ ÑÓ ¿´ ¸Äµº
Nota: La relación ÐØ ÑÓ se corresponde con la relación definida Ð ×Ø.
16 Capítulo 1. Operaciones con listas
1.9. Penúltimo elemento
Ejercicio 1.9 Definir lar relación Ô Ò ÐØ ÑÓ´ ¸ ĵ que se verifique si es el penúltimo ele-
mento de la lista Ä. Por ejemplo,
¹ Ô Ò ÐØ ÑÓ´ ¸ ¸ ¸
¸ ℄µº

¹ Ô Ò ÐØ ÑÓ´
¸Äµº
Ä 
¸ ℄
Ä ¸ 
¸ ℄
×
Solución: Se presentan tres definiciones de Ô Ò ÐØ ÑÓ.
Primera solución: Usando ÔÔ Ò se define Ô Ò ÐØ ÑÓ por
Ô Ò ÐØ ÑÓ ½´ ¸Äµ ¹
ÔÔ Ò ´ ¸ ¸ ℄¸Äµº
Segunda solución: Usando Ö Ú Ö× se define Ô Ò ÐØ ÑÓ por
Ô Ò ÐØ ÑÓ ¾´ ¸Äµ ¹
Ö Ú Ö× ´Ä¸ ¸ ℄µº
Tercera solución: Una definición de Ô Ò ÐØ ÑÓ´ ¸Äµ por recursión en Ä es
Ô Ò ÐØ ÑÓ ¿´ ¸ ¸ ℄µº
Ô Ò ÐØ ÑÓ ¿´ ¸ ¸ Ä℄µ ¹
Ô Ò ÐØ ÑÓ ¿´ ¸ Ä℄µº
1.10. Selección de un elemento
Ejercicio 1.10 Definir la relación × Ð 

 ÓÒ ´ ¸ Ľ¸ ľµ que se verifique si ľ es la lista
obtenida eliminando una ocurrencia de en Ľ. Por ejemplo,
¹ × Ð 

 ÓÒ ´ ¸ ¸ ¸ ℄¸Äµº
Ä ¸ ℄
Ä ¸ ℄
ÆÓ
¹ × Ð 

 ÓÒ ´
¸ ¸ ¸ ℄¸Äµº
ÆÓ
¹ × Ð 

 ÓÒ ´ ¸Ä¸ ½¸¾℄µº
1.11. Inserción de un elemento en una lista 17
Ä ¸ ½¸ ¾℄
Ä ½¸ ¸ ¾℄
Ä ½¸ ¾¸ ℄
ÆÓ
¹ × Ð 

 ÓÒ ´ ¸ ½¸¾¸¿℄¸ ½¸¿℄µº
¾
ÆÓ
Solución: La definición de × Ð 

 ÓÒ ´ ¸Ä½¸Ä¾µ, por recursión en Ľ, es
× Ð 

 ÓÒ ´ ¸ Ä℄¸Äµº
× Ð 

 ÓÒ ´ ¸ Ľ℄¸ ľ℄µ ¹
× Ð 

 ÓÒ ´ ¸Ä½¸Ä¾µº
Nota: La relación × Ð 

 ÓÒ se corresponde con la definida × Ð 
Ø.
1.11. Inserción de un elemento en una lista
Ejercicio 1.11 Definir la relación Ò× ÖØ ´ ¸ Ľ¸ ľµ que se verifique si ľ es una lista
obtenida insertando en Ľ. Por ejemplo,
¹ Ò× ÖØ ´ ¸ ½¸¾℄¸Äµº
Ä ¸ ½¸ ¾℄
Ä ½¸ ¸ ¾℄
Ä ½¸ ¾¸ ℄
ÆÓ
Solución: La definición de Ò× ÖØ es
Ò× ÖØ ´ ¸Ä½¸Ä¾µ ¹
× Ð 
Ø´ ¸Ä¾¸Ä½µº
1.12. Sublista
Ejercicio 1.12 Definir la relación ×Ù Ð ×Ø ´ Ľ¸ ľµ que se verifique si Ľ es una sublista de
ľ. Por ejemplo,
¹ ×Ù Ð ×Ø ´ ¸
℄¸ ¸ ¸
¸ ℄µº
×
¹ ×Ù Ð ×Ø ´ ¸
℄¸ ¸ ¸
¸ ℄µº
ÆÓ
18 Capítulo 1. Operaciones con listas
¹ ×Ù Ð ×Ø ´ ¸ ℄¸Äµº
Ä ¸ ℄
Ä ¸ ¸ ℄
Ä ¸ ¸ ¸ ℄
×
Solución: La definición de ×Ù Ð ×Ø es
×Ù Ð ×Ø ´Ä½¸Ä¾µ ¹
ÔÔ Ò ´ Ä¿¸Ä ¸Ä¾µ¸
ÔÔ Ò ´Ä½¸ Ä ¸Ä µº
1.13. Permutación
Ejercicio 1.13 Definir la relación Ô ÖÑÙØ 
 Ò´·Ä½¸ ľµ que se verifique si ľ es una per-
mutación de Ľ. Por ejemplo,
¹ Ô ÖÑÙØ 
 Ò´ ¸ ¸
℄¸Äµº
Ä ¸ ¸ 
℄
Ä ¸ 
¸ ℄
Ä ¸ ¸ 
℄
Ä ¸ 
¸ ℄
Ä 
¸ ¸ ℄
Ä 
¸ ¸ ℄
ÆÓ
Solución: La definición de Ô ÖÑÙØ 
 ҴĽ¸Ä¾µ, por recursión en Ľ es
Ô ÖÑÙØ 
 Ò´ ℄¸ ℄µº
Ô ÖÑÙØ 
 ҴĽ¸ ľ℄µ ¹
× Ð 
Ø´ ¸Ä½¸Ä¿µ¸
Ô ÖÑÙØ 
 Ò´Ä¿¸Ä¾µº
Nota: La relación Ô ÖÑÙØ 
 ҴĽ¸Ä¾µ es equivalente a la definida Ô ÖÑÙØ Ø ÓҴľ¸Ä½µ.
1.14. Lista con todos sus elementos iguales
Ejercicio 1.14 Definir la relación ØÓ Ó× Ù Ð ×´·Äµ que se verifique si todos los elementos
de la lista Ä son iguales entre sí. Por ejemplo,
1.15. Paridad de la longitud de una lista 19
¹ ØÓ Ó× Ù Ð ×´ ¸ ¸ ℄µº
×
¹ ØÓ Ó× Ù Ð ×´ ¸ ¸ ℄µº
ÆÓ
¹ ØÓ Ó× Ù Ð ×´ ℄µº
×
Solución: La definición de ØÓ Ó× Ù Ð × es
ØÓ Ó× Ù Ð ×´ ℄µº
ØÓ Ó× Ù Ð ×´ ℄µº
ØÓ Ó× Ù Ð ×´ ¸ Ä℄µ ¹
ØÓ Ó× Ù Ð ×´ Ä℄µº
1.15. Paridad de la longitud de una lista
Ejercicio 1.15 Definir la relación ÐÓÒ ØÙ Ô Ö´·Äµ que se verifique si la longitud de la lista
Ä es par. Por ejemplo,
¹ ÐÓÒ ØÙ Ô Ö´ ¸ ℄µº
×
¹ ÐÓÒ ØÙ Ô Ö´ ¸ ¸
℄µº
ÆÓ
Solución: La definición de ÐÓÒ ØÙ Ô Ö, por recursión cruzada con la relación
ÐÓÒ ØÙ ÑÔ Ö, es
ÐÓÒ ØÙ Ô Ö´ ℄µº
ÐÓÒ ØÙ Ô Ö´ Ä℄µ ¹
ÐÓÒ ØÙ ÑÔ Ö´Äµº
La relación ÐÓÒ ØÙ ÑÔ Ö´·Äµ se verifica si la longitud de la lista Ä es impar. Por
ejemplo,
¹ ÐÓÒ ØÙ ÑÔ Ö´ ¸ ℄µº
ÆÓ
¹ ÐÓÒ ØÙ ÑÔ Ö´ ¸ ¸
℄µº
×
La definición de ÐÓÒ ØÙ ÑÔ Ö es
ÐÓÒ ØÙ ÑÔ Ö´ ℄µº
ÐÓÒ ØÙ ÑÔ Ö´ Ä℄µ ¹
ÐÓÒ ØÙ Ô Ö´Äµº
20 Capítulo 1. Operaciones con listas
1.16. Rotación de un elemento
Ejercicio 1.16 Definir la relación ÖÓØ ´ Ľ¸ ľµ que se verifique si ľ es la lista obtenida a
partir de Ľ colocando su primer elemento al final. Por ejemplo,
¹ ÖÓØ ´ ¸ ¸
¸ ℄¸Äµº
Ä ¸ 
¸ ¸ ℄
¹ ÖÓØ ´Ä¸ ¸
¸ ¸ ℄µº
Ä ¸ ¸ 
¸ ℄
Solución: La definición de ÖÓØ es
ÖÓØ ´ Ľ℄¸Äµ ¹
ÔÔ Ò ´Ä½¸ ℄¸Äµº
1.17. Subconjunto
Ejercicio 1.17 Definir la relación ×Ù 
ÓÒ ÙÒØÓ´·Ä½¸ ľµ que se verifique si ľ es un subcon-
junto de Ľ. Por ejemplo,
¹ ×Ù 
ÓÒ ÙÒØÓ´ ¸ ¸
¸ ℄¸ ¸ ℄µº
×
¹ ×Ù 
ÓÒ ÙÒØÓ´ ¸ ¸
¸ ℄¸ ¸ ℄µº
ÆÓ
¹ ×Ù 
ÓÒ ÙÒØÓ´ ¸ ¸
℄¸Äµº
Ä ¸ ¸ 
℄
Ä ¸ ℄
Ä ¸ 
℄
Ä ℄
Ä ¸ 
℄
Ä ℄
Ä 
℄
Ä ℄
ÆÓ
Solución: La definición de ×Ù 
ÓÒ ÙÒØÓ´Ä½¸Ä¾µ, por recursión en Ľ, es
×Ù 
ÓÒ ÙÒØÓ´ ℄¸ ℄µº
×Ù 
ÓÒ ÙÒØÓ´ Ľ℄¸ ľ℄µ ¹
×Ù 
ÓÒ ÙÒØÓ´Ä½¸Ä¾µº
×Ù 
ÓÒ ÙÒØÓ´ Ľ℄¸Ä¾µ ¹
×Ù 
ÓÒ ÙÒØÓ´Ä½¸Ä¾µº
Capítulo 2
Aritmética
2.1. Máximo de dos números
Ejercicio 2.1 Definir la relación Ñ Ü ÑÓ´· ¸· ¸ µ que se verifique si es el máximo de e
. Por ejemplo,
¹ Ñ Ü ÑÓ´¾¸¿¸ µº
¿
¹ Ñ Ü ÑÓ´¿¸¾¸ µº
¿
Solución: La definición de Ñ Ü ÑÓ es
Ñ Ü ÑÓ´ ¸ ¸ µ ¹
º
Ñ Ü ÑÓ´ ¸ ¸ µ ¹
º
Nota: En Prolog está definida la función Ñ Ü´ ¸ µ que devuelve el máximo de e
. Por ejemplo,
¹ × Ñ Ü´ ¸½¼µº
½¼
2.2. Factorial
Ejercicio 2.2 Definir la relación 
ØÓÖ Ð´· ¸ µ que se verifique si es el factorial de .
Por ejemplo,
¹ 
ØÓÖ Ð´¿¸ µº
21
22 Capítulo 2. Aritmética
Solución: La definición de 
ØÓÖ Ð´ ¸ µ, por recursión sobre , es

ØÓÖ Ð´½¸½µº

ØÓÖ Ð´ ¸ µ ¹
½¸
½ × ¹½¸

ØÓÖ Ð´ ½¸ ½µ¸
× ¶ ½º
2.3. Sucesión de Fibonacci
Ejercicio 2.3 La sucesión de Fibonacci es 0,1,1,2,3,5,8,13,21,. . . en la que cada término, salvo
los dos primeros, es la suma de los dos anteriores. Definir la relación ÓÒ 

 ´·Æ¸¹ µ que se
verifique si es el Æ–ésimo término de la sucesión de Fibonacci. Por ejemplo,
¹ ÓÒ 

 ´ ¸ µº
Solución: La definición de ÓÒ 

 ´Æ¸ µ, por inducción en Æ, es
ÓÒ 

 ´¼¸¼µº
ÓÒ 

 ´½¸½µº
ÓÒ 

 ´Æ¸ µ ¹
Æ ½¸
ƽ × Æ¹½¸
ÓÒ 

 ´Æ½¸ ½µ¸
ƾ × Æ¹¾¸
ÓÒ 

 ´Æ¾¸ ¾µ¸
× ½· ¾º
2.4. Máximo común divisor
Ejercicio 2.4 Definir la relación Ñ
 ´· ¸· ¸ µ que se verifique si es el máximo común
divisor de e . Por ejemplo,
¹ Ñ
 ´½¼¸½ ¸ µº
Solución: La definición de Ñ
 es
2.5. Longitud de una lista 23
Ñ
 ´ ¸ ¸ µº
Ñ
 ´ ¸ ¸ µ ¹
¸
½ × ¹ ¸
Ñ
 ´ ¸ ½¸ µº
Ñ
 ´ ¸ ¸ µ ¹
¸
Ñ
 ´ ¸ ¸ µº
2.5. Longitud de una lista
Ejercicio 2.5 Definir la relación ÐÓÒ ØÙ ´ ĸ Ƶ que se verifique si Æ es la longitud de la
lista Ä. Por ejemplo
¹ ÐÓÒ ØÙ ´ ¸ ¸
℄¸Æµº
Æ ¿
¹ ÐÓÒ ØÙ ´Ä¸¿µº
Ä ¸ ¸ ℄
Solución: La definición de ÐÓÒ ØÙ es
ÐÓÒ ØÙ ´ ℄¸¼µº
ÐÓÒ ØÙ ´ Ä℄¸Æµ ¹
ÐÓÒ ØÙ ´Ä¸Æ½µ¸
Æ × Æ½ · ½º
Nota: La relación ÐÓÒ ØÙ se corresponde con la relación definida Ð Ò Ø .
2.6. Lista de números acotada por su longitud
Ejercicio 2.6 Una lista está acotada si todos sus elementos son menores que su longitud. Definir
la relación Ð ×Ø 
ÓØ ´·Äµ que se verifique si todos los elementos de la lista de números Ä
son menores que la longitud de Ä. Por ejemplo,
¹ Ð ×Ø 
ÓØ ´ ½¸¼¸¾℄µº
×
¹ Ð ×Ø 
ÓØ ´ ½¸¿¸¾℄µº
ÆÓ
Solución: La definición de Ð ×Ø 
ÓØ es
24 Capítulo 2. Aritmética
Ð ×Ø 
ÓØ ´Äµ ¹
Ð Ò Ø ´Ä¸Æµ¸
Ð ×Ø 
ÓØ ÙܴĸƵº
donde Ð ×Ø 
ÓØ ÙÜ´·Ä¸·Æµ se verifica si todos los elementos de la lista de nú-
meros Ä son menores que Æ. Por ejemplo,
¹ Ð ×Ø 
ÓØ ÙÜ´ ½¸ ¸¿℄¸ µº
×
¹ Ð ×Ø 
ÓØ ÙÜ´ ½¸ ¸¿℄¸ µº
ÆÓ
y está definida por
Ð ×Ø 
ÓØ ÙÜ´ ℄¸ µº
Ð ×Ø 
ÓØ ÙÜ´ Ä℄¸Æµ ¹
Ƹ
Ð ×Ø 
ÓØ ÙܴĸƵº
2.7. Máximo de una lista de números
Ejercicio 2.7 Definir la relación Ñ Ü Ð ×Ø ´·Ä¸ µ que se verifique si es el máximo de la
lista de números Ä. Por ejemplo,
¹ Ñ Ü Ð ×Ø ´ ½¸¿¸ ¸ ℄¸ µº
Solución: La definición de Ñ Ü Ð ×Ø es
Ñ Ü Ð ×Ø ´ ℄¸ µº
Ñ Ü Ð ×Ø ´ ½¸ ¾ Ä℄¸ µ ¹
¿ × Ñ Ü´ ½¸ ¾µ¸
Ñ Ü Ð ×Ø ´ ¿ Ä℄¸ µº
2.8. Suma de los elementos de una lista
Ejercicio 2.8 Definir la relación ×ÙÑ Ð ×Ø ´·Ä¸ µ que se verifique si es la suma de los
elementos de la lista de números Ä. Por ejemplo,
2.9. Lista de números ordenada 25
¹ ×ÙÑ Ð ×Ø ´ ½¸¿¸ ℄¸ µº
Solución: La definición de ×ÙÑ Ð ×Ø es
×ÙÑ Ð ×Ø ´ ℄¸¼µº
×ÙÑ Ð ×Ø ´ Ä℄¸ µ ¹
×ÙÑ Ð ×Ø ´Ä¸ ½µ¸
× · ½º
Nota: La relación ×ÙÑ Ð ×Ø se corresponde con la relación definida ×ÙÑÐ ×Ø.
2.9. Lista de números ordenada
Ejercicio 2.9 Definir la relación ÓÖ Ò ´·Äµ que se verifique si la lista de números Ä está
ordenada de manera creciente. Por ejemplo,
¹ ÓÖ Ò ´ ½¸¿¸¿¸ ℄µº
×
¹ ÓÖ Ò ´ ½¸¿¸ ¸¾℄µº
ÆÓ
Solución: La definición de ÓÖ Ò es
ÓÖ Ò ´ ℄µº
ÓÖ Ò ´ ¸ Ä℄µ ¹
¸
ÓÖ Ò ´ Ä℄µº
2.10. Suma parcial de una lista
Ejercicio 2.10 Definir la relación ×ÙÑ Ô Ö
 д·Ä½¸· ¸ ľµ que se verifique si ľ es un
subconjunto de Ľ tal que la suma de sus elementos es . Por ejemplo,
¹ ×ÙÑ Ô Ö
 д ½¸¾¸ ¸¿¸¾℄¸ ¸Äµº
Ä ½¸ ¾¸ ¾℄
Ä ¾¸ ¿℄
Ä ℄
Ä ¿¸ ¾℄
ÆÓ
26 Capítulo 2. Aritmética
Solución: Se presentan dos definiciones de ×ÙÑ Ô Ö
 Ð.
Primera solución: Una definición, usando ×Ù 
ÓÒ ÙÒØÓ (p. 20) y ×ÙÑ Ð ×Ø (p. 25),
es
×ÙÑ Ô Ö
 Ð ½´Ä½¸ ¸Ä¾µ ¹
×Ù 
ÓÒ ÙÒØÓ´Ä½¸Ä¾µ¸
×ÙÑ Ð ×Ø ´Ä¾¸ µº
Segunda solución: Una definición recursiva de ×ÙÑ Ô Ö
 Ð es
×ÙÑ Ô Ö
 Ð ¾´ ℄¸¼¸ ℄µº
×ÙÑ Ô Ö
 Ð ¾´ Ľ℄¸ ¸ ľ℄µ ¹
¸
× ¹ ¸
×ÙÑ Ô Ö
 Ð ¾´Ä½¸ ¸Ä¾µº
×ÙÑ Ô Ö
 Ð ¾´ Ľ℄¸ ¸Ä¾µ ¹
×ÙÑ Ô Ö
 Ð ¾´Ä½¸ ¸Ä¾µº
2.11. Lista de Æ veces el número Æ
Ejercicio 2.11 Definir la relación Ð ×Ø ´·Æ¸¹Äµ que se verifique si Ä es la lista de longitud Æ
cuyos elementos son Æ. Por ejemplo,
¹ Ð ×Ø ´¿¸Äµº
Ä ¿¸ ¿¸ ¿℄
Solución: La definición de Ð ×Ø es
Ð ×Ø ´Æ¸Äµ ¹
Ð ×Ø ÙܴƸƸĵº
donde Ð ×Ø ÙÜ´·Æ¸·Å¸¹Äµ se verifica si Ä es la lista de longitud Å cuyos elementos
son Æ. Por ejemplo,
¹ Ð ×Ø ÙÜ´ ¸ ¸Äµº
Ä ¸ ¸ ¸ ℄
y se define por
Ð ×Ø ÙÜ´ ¸¼¸ ℄µº
Ð ×Ø ÙܴƸŸ Æ Ä℄µ ¹
Å ¼¸
Ž × Å¹½¸
Ð ×Ø ÙܴƸޏĵº
2.12. Generación de lista de números 27
2.12. Generación de lista de números
Ejercicio 2.12 Definir la relación Ð ×Ø Ò Ñ ÖÓ×´·Æ¸·Å¸¹Äµ que se verifica si L es la lista
de los números desde N hasta M, ambos inclusive. Por ejemplo,
¹ Ð ×Ø Ò Ñ ÖÓ×´¿¸ ¸Äµº
Ä ¿¸ ¸ ℄
¹ Ð ×Ø Ò Ñ ÖÓ×´¿¸¾¸Äµº
ÆÓ
Solución: La definición de Ð ×Ø Ò Ñ ÖÓ× es
Ð ×Ø Ò Ñ ÖÓ״ƸƸ Æ℄µº
Ð ×Ø Ò Ñ ÖÓ״ƸŸ Æ Ä℄µ ¹
Æ Å¸
ƽ × Æ·½¸
Ð ×Ø Ò Ñ ÖÓ״ƽ¸Å¸Äµº
Nota: La relación Ð ×Ø Ò Ñ ÖÓ× se corresponde con la definida ÒÙÑÐ ×Ø.
2.13. Intervalo entero
Ejercicio 2.13 Definir la relación ÒØÖ ´·Æ½¸·Æ¾¸ µ que se verifique si es un número en-
tero tal que ƽ ≤ ≤ ƾ. Por ejemplo,
¹ ÒØÖ ´¾¸ ¸ µº
¾
¿
ÆÓ
Solución: La definición de ÒØÖ es
ÒØÖ ´Æ½¸Æ¾¸Æ½µ ¹
ƽ ƾº
ÒØÖ ´Æ½¸Æ¾¸ µ ¹
ƽ ƾ¸
Æ¿ × Æ½·½¸
ÒØÖ ´Æ¿¸Æ¾¸ µº
Nota: La relación ÒØÖ se corresponde con la definida ØÛ Ò.
28 Capítulo 2. Aritmética
2.14. K–ésimo elemento
Ejercicio 2.14 Definir la relación Ð Ñ ÒØÓ Ò´·Ã¸ ĸ µ que se verifique si es el Öésimo
elemento de la lista Ä (se empieza a numerar en 1). Por ejemplo,
¹ Ð Ñ ÒØÓ Ò´¾¸ ¸ ¸
¸ ℄¸ µº
¹ Ð Ñ ÒØÓ Ò´¾¸Ä¸ µº
Ä ¸ ℄
Solución: La definición de Ð Ñ ÒØÓ Ò es
Ð Ñ ÒØÓ Ò´½¸ ℄¸ µº
Ð Ñ ÒØÓ Ò´Ã¸ Ä℄¸ µ ¹
à ½¸
ý × Ã¹½¸
Ð Ñ ÒØÓ Ò´Ã½¸Ä¸ µº
Nota: La relación Ð Ñ ÒØÓ Ò se corresponde con la relación definida ÒØ ½.
2.15. Multiplicación de las ocurrencias de los elementos
de una lista
Ejercicio 2.15 Definir la relación ÑÙÐØ ÔÐ 
 ´·Ä½¸·Æ¸¹Ä¾µ que se verifica si ľ es la lista
obtenida repitiendo Æ veces los elementos de la lista Ľ. Por ejemplo,
¹ ÑÙÐØ ÔÐ 
 ´ ¸ ¸
℄¸¿¸Äµº
Ä ¸ ¸ ¸ ¸ ¸ ¸ 
¸ 
¸ 
℄
Solución: La definición de ÑÙÐØ ÔÐ 
 es
ÑÙÐØ ÔÐ 
 ´Ä½¸Æ¸Ä¾µ ¹
ÑÙÐØ ÔÐ 
 ÙܴĽ¸Æ¸Æ¸Ä¾µº
donde ÑÙÐØ ÔÐ 
 ÙÜ´·Ä½¸·Ã¸·Æ¸¹Ä¾µ se verifica si ľ es la lista obtenida repitien-
do à veces el primer elemento de Ľ y Æ veces los restantes elementos. Por ejemplo,
¹ ÑÙÐØ ÔÐ 
 ÙÜ´ ¸ ¸
℄¸¾¸¿¸Äµº
Ä ¸ ¸ ¸ ¸ ¸ 
¸ 
¸ 
℄
Su definición es
2.15. Multiplicación de las ocurrencias de los elementos de una lista 29
ÑÙÐØ ÔÐ 
 ÙÜ´ ℄¸ ¸ ¸ ℄µº
ÑÙÐØ ÔÐ 
 ÙÜ´ Ľ℄¸¼¸Æ¸Ä¾µ ¹
ÑÙÐØ ÔÐ 
 ÙܴĽ¸Æ¸Æ¸Ä¾µº
ÑÙÐØ ÔÐ 
 ÙÜ´ Ľ℄¸Ã¸Æ¸ ľ℄µ ¹
à ¼¸
ý × Ã¹½¸
ÑÙÐØ ÔÐ 
 ÙÜ´ Ľ℄¸Ã½¸Æ¸Ä¾µº
30 Capítulo 2. Aritmética
Capítulo 3
Estructuras
3.1. Segmentos como objetos estructurados
Ejercicio 3.1 Supongamos que representamos los puntos del plano mediante términos de la for-
ma
ÔÙÒØÓ´ ¸ µ
donde e son números, y los segmentos del plano mediante términos de la forma
× Ñ ÒØÓ´È½¸È¾µ
donde Ƚ 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 ´½¸½µ y ´½¸¾µ?
2. ¿Es vertical el segmento que une los puntos ´½¸½µ y ´¾¸¾µ?
3. ¿Hay algún tal que el segmento que une los puntos ´½¸½µ y ´¾¸ µ sea vertical?
4. ¿Hay algún tal que el segmento que une los puntos ´½¸¾µ y ´ ¸¿µ sea vertical?
5. ¿Hay algún tal que el segmento que une los puntos ´½¸½µ y ´¾¸ µ sea horizontal?
31
32 Capítulo 3. Estructuras
6. ¿Para qué puntos el segmento que comienza en ´¾¸¿µ es vertical?
7. ¿Hay algún segmento que sea horizontal y vertical?
Solución: Las definiciones de Ú ÖØ 
 Ð y ÓÖ ÞÓÒØ Ð son
Ú ÖØ 
 Ð´× ´ÔÙÒØÓ´ ¸ µ¸ÔÙÒØÓ´ ¸ ½µµµº
ÓÖ ÞÓÒØ Ð´× ´ÔÙÒØÓ´ ¸ µ¸ÔÙÒØÓ´ ½¸ µµµº
Las respuestas a las preguntas son
1. ¿Es vertical el segmento que une los puntos ´½¸½µ y ´½¸¾µ?
¹ Ú ÖØ 
 Ð´× ´ÔÙÒØÓ´½¸½µ¸ÔÙÒØÓ´½¸¾µµµº
×
2. ¿Es vertical el segmento que une los puntos ´½¸½µ y ´¾¸¾µ?
¹ Ú ÖØ 
 Ð´× ´ÔÙÒØÓ´½¸½µ¸ÔÙÒØÓ´¾¸¾µµµº
ÆÓ
3. ¿Hay algún tal que el segmento que une los puntos ´½¸½µ y ´¾¸ µ sea vertical?
¹ Ú ÖØ 
 Ð´× ´ÔÙÒØÓ´½¸½µ¸ÔÙÒØÓ´¾¸ µµµº
ÆÓ
4. ¿Hay algún tal que el segmento que une los puntos ´½¸¾µ y ´ ¸¿µ sea vertical?
¹ Ú ÖØ 
 Ð´× ´ÔÙÒØÓ´½¸¾µ¸ÔÙÒØÓ´ ¸¿µµµº
½
ÆÓ
5. ¿Hay algún tal que el segmento que une los puntos ´½¸½µ y ´¾¸ µ sea horizontal?
¹ ÓÖ ÞÓÒØ Ð´× ´ÔÙÒØÓ´½¸½µ¸ÔÙÒØÓ´¾¸ µµµº
½
ÆÓ
6. ¿Para qué puntos el segmento que comienza en ´¾¸¿µ es vertical?
¹ Ú ÖØ 
 Ð´× ´ÔÙÒØÓ´¾¸¿µ¸Èµµº
È ÔÙÒØÓ´¾¸ µ
ÆÓ
7. ¿Hay algún segmento que sea horizontal y vertical?
3.2. Base de datos familiar 33
¹ Ú ÖØ 
 д˵¸ ÓÖ ÞÓÒØ д˵º
Ë × ´ÔÙÒØÓ´ ¸ µ¸ ÔÙÒØÓ´ ¸ µµ
ÆÓ
¹ Ú ÖØ 
 д µ¸ ÓÖ ÞÓÒØ д µº
×
3.2. Base de datos familiar
Ejercicio 3.2 En este ejercicio vamos a trabajar con una base de datos familiar.
1. Representar la información relativa a las siguientes familias:
En la primera familia,
• el padre es Tomás García Pérez, nacido el 7 de Mayo de 1960, trabaja de profesor
y gana 60 euros diarios;
• la madre es Ana López Ruiz, nacida el 10 de marzo de 1962, trabaja de médica y
gana 90 euros diarios;
• el hijo es Juan García López, nacido el 5 de Enero de 1980, estudiante;
• la hija es María García López, nacida el 12 de Abril de 1992, estudiante.
En la segunda familia,
• el padre es José Pérez Ruiz, nacido el 6 de Marzo de 1963, trabaja de pintor y
gana 120 euros diarios;
• la madre es Luisa Gálvez Pérez, nacida el 12 de Mayo de 1964, trabaja de médica
y gana 90 euros diarios;
• un hijo es Juan Luis Pérez Pérez, nacido el 5 de Febrero de 1990, estudiante;
• una hija es María José Pérez Pérez, nacida el 12 de Junio de 1992, estudiante;
• otro hijo es José María Pérez Pérez, 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 relación 
 × Ó´ µ que se verifique si es un hombre casado.
34 Capítulo 3. Estructuras
5. Preguntar por los hombres casados.
6. Definir la relación 
 × ´ µ 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 relación Ó´ µ que se verifique si figura en alguna lista de hijos.
10. Preguntar por los hijos.
11. Definir la relación Ô Ö×ÓÒ ´ µ que se verifique si es una persona existente en la base de
datos.
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.
14. Definir la relación 
 Ò 
 Ñ ÒØÓ´ ¸ µ de forma que si es una persona, enton-
ces es su fecha de nacimiento.
15. Buscar todos los hijos nacidos en 1992.
16. Definir la relación ×Ù Ð Ó´ ¸ µ 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 dia-
rios.
18. Definir la relación ØÓØ Ð´Ä¸ µ de forma que si Ä es una lista de personas, entonces es la
suma de los sueldos de las personas de la lista Ä.
19. Calcular los ingresos totales de cada familia.
Solución: Solución del apartado 1: La representación de la información sobre las
dos familias es
Ñ Ð ´Ô Ö×ÓÒ ´ ØÓÑ ×¸ Ö
 ¸Ô Ö Þ℄¸

 ´ ¸Ñ ÝÓ¸½ ¼µ¸
ØÖ Ó´ÔÖÓ ×ÓÖ¸ ¼µµ¸
Ô Ö×ÓÒ ´ Ò ¸ÐÓÔ Þ¸ÖÙ Þ℄¸

 ´½¼¸Ñ ÖÞÓ¸½ ¾µ¸
ØÖ Ó´Ñ 
 ¸ ¼µµ¸
Ô Ö×ÓÒ ´ Ù Ò¸ Ö
 ¸ÐÓÔ Þ℄¸

 ´ ¸ Ò ÖÓ¸½ ¼µ¸
×ØÙ ÒØ µ¸
3.2. Base de datos familiar 35
Ô Ö×ÓÒ ´ Ñ Ö ¸ Ö
 ¸ÐÓÔ Þ℄¸

 ´½¾¸ Ö Ð¸½ ¾µ¸
×ØÙ ÒØ µ ℄µº
Ñ Ð ´Ô Ö×ÓÒ ´ Ó× ¸Ô Ö Þ¸ÖÙ Þ℄¸

 ´ ¸Ñ ÖÞÓ¸½ ¿µ¸
ØÖ Ó´Ô ÒØÓÖ¸½¾¼µµ¸
Ô Ö×ÓÒ ´ ÐÙ × ¸ ÐÚ Þ¸Ô Ö Þ℄¸

 ´½¾¸Ñ ÝÓ¸½ µ¸
ØÖ Ó´Ñ 
 ¸ ¼µµ¸
Ô Ö×ÓÒ ´ Ù Ò ÐÙ ×¸Ô Ö Þ¸Ô Ö Þ℄¸

 ´ ¸ Ö ÖÓ¸½ ¼µ¸
×ØÙ ÒØ µ¸
Ô Ö×ÓÒ ´ Ñ Ö Ó× ¸Ô Ö Þ¸Ô Ö Þ℄¸

 ´½¾¸ ÙÒ Ó¸½ ¾µ¸
×ØÙ ÒØ µ¸
Ô Ö×ÓÒ ´ Ó× Ñ Ö ¸Ô Ö Þ¸Ô Ö Þ℄¸

 ´½¾¸ ÙÐ Ó¸½ µ¸
×ØÙ ÒØ µ ℄µº
Solución del apartado 2: Las consultas, y sus respuestas son,
¹ Ñ Ð ´ ¸ ¸ ℄µº
ÆÓ
¹ Ñ Ð ´ ¸ ¸ ℄µº
ÆÓ
¹ Ñ Ð ´ ¸ ¸ ¸ ℄µº
×
¹ Ñ Ð ´ ¸ ¸ ¸ ¸ ℄µº
×
¹ Ñ Ð ´ ¸ ¸ ¸ ¸ ¸ ℄µº
ÆÓ
Solución del apartado 3:
¹ Ñ Ð ´Ô Ö×ÓÒ ´ÆÈ¸ ¸ µ¸ ¸ ¸ ¸ ℄µº
ÆÈ Ó× ¸ Ô Ö Þ¸ ÖÙ Þ℄
ÆÓ
Solución del apartado 4:

 × Ó´ µ ¹
Ñ Ð ´ ¸ ¸ µº
36 Capítulo 3. Estructuras
Solución del apartado 5:
¹ 
 × Ó´ µº
Ô Ö×ÓÒ ´ ØÓÑ ×¸ Ö
 ¸ Ô Ö Þ℄¸

 ´ ¸ Ñ ÝÓ¸ ½ ¼µ¸
ØÖ Ó´ÔÖÓ ×ÓÖ¸ ¼µµ
Ô Ö×ÓÒ ´ Ó× ¸ Ô Ö Þ¸ ÖÙ Þ℄¸

 ´ ¸ Ñ ÖÞÓ¸ ½ ¿µ¸
ØÖ Ó´Ô ÒØÓÖ¸ ½¾¼µµ
ÆÓ
Solución del apartado 6:

 × ´ µ ¹
Ñ Ð ´ ¸ ¸ µº
Solución del apartado 7:
¹ 
 × ´ µº
Ô Ö×ÓÒ ´ Ò ¸ ÐÓÔ Þ¸ ÖÙ Þ℄¸

 ´½¼¸ Ñ ÖÞÓ¸ ½ ¾µ¸
ØÖ Ó´Ñ 
 ¸ ¼µµ
Ô Ö×ÓÒ ´ ÐÙ × ¸ ÐÚ Þ¸ Ô Ö Þ℄¸

 ´½¾¸ Ñ ÝÓ¸ ½ µ¸
ØÖ Ó´Ñ 
 ¸ ¼µµ
ÆÓ
Solución del apartado 8:
¹ 
 × ´Ô Ö×ÓÒ ´ Ƹ ¸ ℄¸ ¸ØÖ Ó´ ¸ µµµº
Æ Ò
Æ ÐÙ ×
ÆÓ
Solución del apartado 9:
Ó´ µ ¹
Ñ Ð ´ ¸ ¸Äµ¸
Ñ Ñ Ö´ ¸Äµº
Solución del apartado 10:
3.2. Base de datos familiar 37
¹ Ó´ µº
Ô Ö×ÓÒ ´ Ù Ò¸ Ö
 ¸ÐÓÔ Þ℄¸ 
 ´ ¸ Ò ÖÓ¸½ ¼µ¸ ×ØÙ ÒØ µ
Ô Ö×ÓÒ ´ Ñ Ö ¸ Ö
 ¸ÐÓÔ Þ℄¸ 
 ´½¾¸ Ö Ð¸½ ¾µ¸ ×ØÙ ÒØ µ
Ô Ö×ÓÒ ´ Ù Ò ÐÙ ×¸Ô Ö Þ¸Ô Ö Þ℄¸ 
 ´ ¸ Ö ÖÓ¸½ ¼µ¸ ×ØÙ ÒØ µ
Ô Ö×ÓÒ ´ Ñ Ö Ó× ¸Ô Ö Þ¸Ô Ö Þ℄¸ 
 ´½¾¸ ÙÒ Ó¸½ ¾µ¸ ×ØÙ ÒØ µ
Ô Ö×ÓÒ ´ Ó× Ñ Ö ¸Ô Ö Þ¸Ô Ö Þ℄¸ 
 ´½¾¸ ÙÐ Ó¸½ µ¸ ×ØÙ ÒØ µ
ÆÓ
Solución del apartado 11:
Ô Ö×ÓÒ ´ µ ¹

 × Ó´ µ

 × ´ µ
Ó´ µº
Solución del apartado 12:
¹ Ô Ö×ÓÒ ´Ô Ö×ÓÒ ´ ¸ ¸ µµº
ØÓÑ ×¸ Ö
 ¸ Ô Ö Þ℄
Ó× ¸ Ô Ö Þ¸ ÖÙ Þ℄
Ò ¸ ÐÓÔ Þ¸ ÖÙ Þ℄
ÐÙ × ¸ ÐÚ Þ¸ Ô Ö Þ℄
Ù Ò¸ Ö
 ¸ ÐÓÔ Þ℄
Ñ Ö ¸ Ö
 ¸ ÐÓÔ Þ℄
Ù Ò Ð٠׸ Ô Ö Þ¸ Ô Ö Þ℄
Ñ Ö Ó× ¸ Ô Ö Þ¸ Ô Ö Þ℄
Ó× Ñ Ö ¸ Ô Ö Þ¸ Ô Ö Þ℄
ÆÓ
Solución del apartado 13:
¹ Ô Ö×ÓÒ ´Ô Ö×ÓÒ ´ ¸ 
 ´ ¸ ¸ Óµ¸ ×ØÙ ÒØ µµ¸ Ó ½ ¿º
Ù Ò¸ Ö
 ¸ ÐÓÔ Þ℄
Ó ½ ¼
Ñ Ö ¸ Ö
 ¸ ÐÓÔ Þ℄
Ó ½ ¾
Ù Ò Ð٠׸ Ô Ö Þ¸ Ô Ö Þ℄
Ó ½ ¼
Ñ Ö Ó× ¸ Ô Ö Þ¸ Ô Ö Þ℄
Ó ½ ¾
ÆÓ
Solución del apartado 14:
38 Capítulo 3. Estructuras

 Ò 
 Ñ ÒØÓ´Ô Ö×ÓÒ ´ ¸ ¸ µ¸ µº
Solución del apartado 15:
¹ Ó´ µ¸ 
 Ò 
 Ñ ÒØÓ´ ¸ 
 ´ ¸ ¸½ ¾µµº
Ô Ö×ÓÒ ´ Ñ Ö Ó× ¸Ô Ö Þ¸Ô Ö Þ℄¸ 
 ´½¾¸ ÙÒ Ó¸½ ¾µ¸ ×ØÙ ÒØ µ
ÆÓ
Solución del apartado 16:
×Ù Ð Ó´Ô Ö×ÓÒ ´ ¸ ¸ØÖ Ó´ ¸ µµ¸ µº
×Ù Ð Ó´Ô Ö×ÓÒ ´ ¸ ¸ ×ØÙ ÒØ µ¸¼µº
Solución del apartado 17:
¹ Ô Ö×ÓÒ ´ µ¸

 Ò 
 Ñ ÒØÓ´ ¸ 
 ´ ¸ ¸ Óµµ¸
Ó ½ ¸
×Ù Ð Ó´ ¸ µ¸
¾º
Ô Ö×ÓÒ ´ Ó× ¸ Ô Ö Þ¸ ÖÙ Þ℄¸

 ´ ¸ Ñ ÖÞÓ¸ ½ ¿µ¸
ØÖ Ó´Ô ÒØÓÖ¸ ½¾¼µµ
Ó ½ ¿
½¾¼
Ô Ö×ÓÒ ´ Ò ¸ ÐÓÔ Þ¸ ÖÙ Þ℄¸

 ´½¼¸ Ñ ÖÞÓ¸ ½ ¾µ¸
ØÖ Ó´Ñ 
 ¸ ¼µµ
Ó ½ ¾
¼
ÆÓ
Solución del apartado 18:
ØÓØ Ð´ ℄¸¼µº
ØÓØ Ð´ Ä℄¸ µ ¹
×Ù Ð Ó´ ¸ ½µ¸
ØÓØ Ð´Ä¸ ¾µ¸
× ½ · ¾º
Solución del apartado 19:
3.3. Autómata no–determinista 39
¹ Ñ Ð ´ ¸ ¸ µ¸ØÓØ Ð´ ¸ ℄¸ÌÓØ еº
Ô Ö×ÓÒ ´ ØÓÑ ×¸ Ö
 ¸Ô Ö Þ℄¸

 ´ ¸Ñ ÝÓ¸½ ¼µ¸
ØÖ Ó´ÔÖÓ ×ÓÖ¸ ¼µµ
Ô Ö×ÓÒ ´ Ò ¸ÐÓÔ Þ¸ÖÙ Þ℄¸

 ´½¼¸Ñ ÖÞÓ¸½ ¾µ¸
ØÖ Ó´Ñ 
 ¸ ¼µµ
Ô Ö×ÓÒ ´ Ù Ò¸ Ö
 ¸ÐÓÔ Þ℄¸ 
 ´ ¸ Ò ÖÓ¸½ ¼µ¸ ×ØÙ ÒØ µ¸
Ô Ö×ÓÒ ´ Ñ Ö ¸ Ö
 ¸ÐÓÔ Þ℄¸ 
 ´½¾¸ Ö Ð¸½ ¾µ¸ ×ØÙ ÒØ µ℄
ÌÓØ Ð ½ ¼
Ô Ö×ÓÒ ´ Ó× ¸Ô Ö Þ¸ÖÙ Þ℄¸

 ´ ¸Ñ ÖÞÓ¸½ ¿µ¸
ØÖ Ó´Ô ÒØÓÖ¸½¾¼µµ
Ô Ö×ÓÒ ´ ÐÙ × ¸ ÐÚ Þ¸Ô Ö Þ℄¸

 ´½¾¸Ñ ÝÓ¸½ µ¸
ØÖ Ó´Ñ 
 ¸ ¼µµ
Ô Ö×ÓÒ ´ Ù Ò ÐÙ ×¸Ô Ö Þ¸Ô Ö Þ℄¸ 
 ´ ¸ Ö ÖÓ¸½ ¼µ¸ ×ØÙ ÒØ µ¸
Ô Ö×ÓÒ ´ Ñ Ö Ó× ¸Ô Ö Þ¸Ô Ö Þ℄¸ 
 ´½¾¸ ÙÒ Ó¸½ ¾µ¸ ×ØÙ ÒØ µ
Ô Ö×ÓÒ ´ Ó× Ñ Ö ¸Ô Ö Þ¸Ô Ö Þ℄¸ 
 ´½¾¸ ÙÐ Ó¸½ µ¸ ×ØÙ ÒØ µ℄
ÌÓØ Ð ¾½¼
ÆÓ
3.3. Autómata no–determinista
Ejercicio 3.3 Consideremos el autómata representado por
40 Capítulo 3. Estructuras
b
e1
a
a
e2
b
e3e4
b
siendo ¿ el estado final.
1. Representar el autómata utilizando las siguientes relaciones
Ò Ð´ µ que se verifica si es el estado final.
ØÖ Ò×´ ½¸ ¸ ¾µ que se verifica si se puede pasar del estado ½ al estado ¾ usando
la letra .
ÒÙÐÓ´ ½¸ ¾µ que se verifica si se puede pasar del estado ½ al estado ¾ mediante un
movimiento nulo.
2. Definir la relación 
 ÔØ ´ ¸Äµ que se verifique si el autómata, a partir del estado ,
acepta la lista Ä. Por ejemplo,
¹ 
 ÔØ ´ ½¸ ¸ ¸ ¸ ℄µº
×
¹ 
 ÔØ ´ ¾¸ ¸ ¸ ¸ ℄µº
ÆÓ
3. Determinar si el autómata acepta la lista ¸ ¸ ¸ ℄.
4. Determinar los estados a partir de los cuales el autómata acepta la lista ¸ ℄.
5. Determinar las palabras de longitud 3 aceptadas por el autómata a partir del estado ½.
6. Definir la relación 
 ÔØ 
ÓØ ½´ ¸Ä¸Æµ que se verifique si el autómata, a partir
del estado , acepta la lista Ä y la longitud de Ä es Æ.
3.3. Autómata no–determinista 41
7. Buscar las cadenas aceptadas a partir de ½ con longitud 3.
8. Definir la relación 
 ÔØ 
ÓØ ¾´ ¸Ä¸Æµ que se verifique si el autómata, a partir
del estado , acepta la lista Ä y la longitud de Ä es menor o igual que Æ.
9. Buscar las cadenas aceptadas a partir de ½ con longitud menor o igual 3.
Solución: Solución del apartado 1:
Ò Ð´ ¿µº
ØÖ Ò×´ ½¸ ¸ ½µº
ØÖ Ò×´ ½¸ ¸ ¾µº
ØÖ Ò×´ ½¸ ¸ ½µº
ØÖ Ò×´ ¾¸ ¸ ¿µº
ØÖ Ò×´ ¿¸ ¸ µº
ÒÙÐÓ´ ¾¸ µº
ÒÙÐÓ´ ¿¸ ½µº
Solución del apartado 2:

 ÔØ ´ ¸ ℄µ ¹
Ò Ð´ µº

 ÔØ ´ ¸ Ä℄µ ¹
ØÖ Ò×´ ¸ ¸ ½µ¸

 ÔØ ´ ½¸Äµº

 ÔØ ´ ¸Äµ ¹
ÒÙÐÓ´ ¸ ½µ¸

 ÔØ ´ ½¸Äµº
Solución del apartado 3:
¹ 
 ÔØ ´ ½¸ ¸ ¸ ¸ ℄µº
×
Solución del apartado 4:
¹ 
 ÔØ ´ ¸ ¸ ℄µº
½
¿
ÆÓ
Solución del apartado 5:
42 Capítulo 3. Estructuras
¹ 
 ÔØ ´ ½¸ ¸ ¸ ℄µº
ÆÓ
Solución del apartado 6: Presentamos dos definiciones. La primera usando 
 ÔØ

 ÔØ 
ÓØ ½ ´ ¸Ä¸Æµ ¹
Ð Ò Ø ´Ä¸Æµ¸

 ÔØ ´ ¸Äµº
La segunda definición es una variación de la definición de acepta:

 ÔØ 
ÓØ ½ ´ ¸ ℄¸¼µ ¹
Ò Ð´ µº

 ÔØ 
ÓØ ½ ´ ¸ Ä℄¸Æµ ¹
Æ ¼¸
ØÖ Ò×´ ¸ ¸ ½µ¸
Å × Æ ¹ ½¸

 ÔØ 
ÓØ ½ ´ ½¸Ä¸Åµº

 ÔØ 
ÓØ ½ ´ ¸Ä¸Æµ ¹
ÒÙÐÓ´ ¸ ½µ¸

 ÔØ 
ÓØ ½ ´ ½¸Ä¸Æµº
Nota: La primera definición es más simple y eficiente que la segunda como se ob-
serva en el siguiente ejemplo
¹ Ø Ñ ´ 
 ÔØ 
ÓØ ½ ´ ¾¸ ĸ ¼¼¼µµº
± ½¼¸¼¾ Ò Ö Ò
 ׸ ¼º¼½ ÈÍ Ò ¼º¼½ × 
ÓÒ × ´½¾ ± È͸ ½¼¼¾ ¼¼ Ä Ô×µ
¹ Ø Ñ ´ 
 ÔØ 
ÓØ ½ ´ ¾¸ ĸ ¼¼¼µµº
± ¾¼¸¼¿ Ò Ö Ò
 ׸ ¼º¼¾ ÈÍ Ò ¼º¼¾ × 
ÓÒ × ´½¾ ± È͸ ½¼¼½ ¼ Ä Ô×µ
A partir de ahora, adoptaremos la definición 
 ÔØ 
ÓØ ½

 ÔØ 
ÓØ ½´ ¸Ä¸Åµ ¹

 ÔØ 
ÓØ ½ ´ ¸Ä¸Åµº
Solución del apartado 7:
3.3. Autómata no–determinista 43
¹ 
 ÔØ 
ÓØ ½´ ½¸Ä¸¿µº
Ä ¸ ¸ ℄
Ä ¸ ¸ ℄
ÆÓ
Solución del apartado 8: Presentamos dos definiciones. La primera usando 
 ÔØ

 ÔØ 
ÓØ ¾ ´ ¸Ä¸Æµ ¹
ØÛ Ò´¼¸Æ¸Åµ¸
Ð Ò Ø ´Ä¸Åµ¸

 ÔØ ´ ¸Äµº
y la segunda modificando 
 ÔØ

 ÔØ 
ÓØ ¾ ´ ¸ ℄¸ Ƶ ¹
Ò Ð´ µº

 ÔØ 
ÓØ ¾ ´ ¸ Ä℄¸Æµ ¹
Æ ¼¸
ØÖ Ò×´ ¸ ¸ ½µ¸
Å × Æ¹½¸

 ÔØ 
ÓØ ¾ ´ ½¸Ä¸Åµº

 ÔØ 
ÓØ ¾ ´ ¸Ä¸Æµ ¹
Æ ¼¸
ÒÙÐÓ´ ¸ ½µ¸

 ÔØ 
ÓØ ¾ ´ ½¸Ä¸Æµº
Nota: La primera definición es más simple y eficiente que la segunda como se ob-
serva en el siguiente ejemplo
¹ Ø Ñ ´ 
 ÔØ 
ÓØ ¾ ´ ½¸ ĸ½¼¼¼¼µµº
± Ò Ö Ò
 ׸ ¼º¼¼ ÈÍ Ò ¼º¼¼ × 
ÓÒ × ´¼± È͸ ÁÒ Ò Ø Ä Ô×µ
¹ Ø Ñ ´ 
 ÔØ 
ÓØ ¾ ´ ½¸ ĸ½¼¼¼¼µµº
± ¼¸¼¾ Ò Ö Ò
 ׸ ¼º¼ ÈÍ Ò ¼º¼ × 
ÓÒ × ´½½¿± È͸ ½ ½ Ä Ô×µ
A partir de ahora, adoptaremos la definición 
 ÔØ 
ÓØ ¾

 ÔØ 
ÓØ ¾´ ¸Ä¸Åµ ¹

 ÔØ 
ÓØ ¾ ´ ¸Ä¸Åµº
Solución del apartado 9:
¹ 
 ÔØ 
ÓØ ¾´ ½¸Ä¸¿µº
Ä ¸ ¸ ℄
Ä ¸ ℄
Ä ¸ ¸ ℄
ÆÓ
44 Capítulo 3. Estructuras
3.4. El problema del mono y el plátano
Ejercicio 3.4 Un mono se encuentra en la puerta de una habitación. En el centro de la habitación
hay un plátano colgado del techo. El mono está hambriento y desea coger el plátano, pero no lo
alcanza desde el suelo. En la ventana de la habitación hay una silla que el mono puede usar. El
mono puede realizar las siguientes acciones: pasear de un lugar a otro de la habitación, empujar
la silla de un lugar a otro de la habitación (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 plátano (si está encima de la silla en el
centro de la habitación).
Definir la relación ×ÓÐÙ
 Ò´ ¸Ëµ que se verifique si Ë es una sucesión de acciones que
aplicadas al estado permiten al mono coger el plátano. Por ejemplo,
¹ ×ÓÐÙ
 Ò´ ר Ó´ÔÙ ÖØ ¸×Ù ÐÓ¸Ú ÒØ Ò ¸× Òµ¸Äµº
Ä Ô × Ö´ÔÙ ÖØ ¸Ú ÒØ Ò µ¸ ÑÔÙ Ö´Ú ÒØ Ò ¸
 ÒØÖÓµ¸×Ù Ö¸
Ó Ö℄
donde ר Ó´ÈŸ ŸÈ˸ µ significa que el mono se encuentra en la posición ÈÅ (puerta, centro
o ventana) encima de Å (suelo o silla), la silla se encuentra en la posición ÈË (puerta, centro o
ventana) y el mono tiene ( = 
ÓÒ) o no ( = × Ò) el plátano.
Solución:
×ÓÐÙ
 Ò´ ר Ó´ ¸ ¸ ¸
ÓÒµ¸ ℄µº
×ÓÐÙ
 Ò´ ½¸ Ä℄µ ¹
ÑÓÚ Ñ ÒØÓ´ ½¸ ¸ ¾µ¸
×ÓÐÙ
 Ò´ ¾¸Äµº
La relación ÑÓÚ Ñ ÒØÓ´ ר Ó´ÈŽ¸ ޏÈ˽¸ ½µ¸ ¸ ר Ó´Èž¸ ž¸È˾¸ ¾µµ se ve-
rifica si en el ר Ó´ÈŽ¸ ޏÈ˽¸ ½µ se puede aplicar la acción y como resultado de
su aplicación se pasa al ר Ó´Èž¸ ž¸È˾¸ ¾µ.
ÑÓÚ Ñ ÒØÓ´ ר Ó´
 ÒØÖÓ¸× ÐÐ ¸
 ÒØÖÓ¸× Òµ¸

Ó Ö¸
ר Ӵ
 ÒØÖÓ¸× ÐÐ ¸
 ÒØÖÓ¸
ÓÒµµº
ÑÓÚ Ñ ÒØÓ´ ר Ó´ ¸×Ù ÐÓ¸ ¸Íµ¸
×Ù Ö¸
ר Ó´ ¸× ÐÐ ¸ ¸Íµµº
ÑÓÚ Ñ ÒØÓ´ ר Ó´ ½¸×Ù ÐÓ¸ ½¸Íµ¸
ÑÔÙ Ö´ ½¸ ¾µ¸
ר Ó´ ¾¸×Ù ÐÓ¸ ¾¸Íµµº
ÑÓÚ Ñ ÒØÓ´ ר Ó´ ¸×Ù ÐÓ¸ ¸Íµ¸
Ô × Ö´ ¸ µ¸
ר Ó´ ¸×Ù ÐÓ¸ ¸Íµµº
3.5. Movimientos del caballo del ajedrez 45
3.5. Movimientos del caballo del ajedrez
Ejercicio 3.5 Supongamos que los cuadros del tablero de ajedrez los representamos por pares de
números ¸ ℄ con e entre ½ y .
1. Definir la relación × ÐØ ´· ½¸ ¾µ que se verifica si el caballo puede pasar en un movi-
miento del cuadrado ½ al cuadrado ¾. Por ejemplo,
¹ × ÐØ ´ ½¸½℄¸Ëµº
Ë ¿¸¾℄
Ë ¾¸¿℄
ÆÓ
2. Definir la relación 
 Ñ ÒӴĵ que se verifique si Ä es una lista de cuadrados representando
el camino recorrido por un caballo sobre un tablero vacío. Por ejemplo,
¹ 
 Ñ ÒÓ´ ½¸½℄¸ ℄µº
¿¸¾℄
¾¸¿℄
ÆÓ
3. Usando la relación 
 Ñ ÒÓ, 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 número de movimientos necesarios para desplazar el caballo del cuadro
½¸½℄ al ¾¸¾℄. ¿Cuántos caminos de dicha longitud hay de [1,1] a [2,2]?
Solución: Solución del apartado 1:
× ÐØ ´ ¸ ℄¸ ½¸ ½℄µ ¹
ÜÝ´ ܸ ݵ¸
½ × · ܸ

ÓÖÖ 
ØÓ´ ½µ¸
½ × · ݸ

ÓÖÖ 
ØÓ´ ½µº
La relación ÜÝ´ ¸ µ se verifica si un caballo puede moverse espacios horizon-
tales e verticales.
ÜÝ´¾¸½µº
ÜÝ´¾¸¹½µº
ÜÝ´¹¾¸½µº
ÜÝ´¹¾¸¹½µº
46 Capítulo 3. Estructuras
ÜÝ´½¸¾µº
ÜÝ´½¸¹¾µº
ÜÝ´¹½¸¾µº
ÜÝ´¹½¸¹¾µº
La relación 
ÓÖÖ 
ØÓ´· µ se verifica si está entre 1 y 8.

ÓÖÖ 
ØÓ´ µ ¹
½ ¸
º
Solución del apartado 2:

 Ñ ÒÓ´ ℄µº

 Ñ ÒÓ´ ½¸ ¾ Ä℄µ ¹
× ÐØ ´ ½¸ ¾µ¸

 Ñ ÒÓ´ ¾ Ä℄µº
Solución del apartado 3:
¹ 
 Ñ ÒÓ´ ¾¸½℄¸ ½¸ ¸ ℄¸ ¾¸ ¸ ℄℄µº
½ ¸ ¾℄ ¾ ¸ ℄
½ ¸ ¾℄ ¾ ¸ ℄
½ ¸ ¾℄ ¾ ¸ ℄
½ ¸ ¾℄ ¾ ¸ ℄ ¿
½ ¿¸ ¿℄ ¾ ¸ ℄
½ ¿¸ ¿℄ ¾ ¸ ℄
½ ¿¸ ¿℄ ¾ ¸ ℄
½ ¿¸ ¿℄ ¾ ¸ ℄ ¿
ÆÓ
Solución del apartado 4:
¹ 
 Ñ ÒÓ´ ½¸½℄¸ ¸ ¾¸¾℄℄µº
ÆÓ
¹ 
 Ñ ÒÓ´ ½¸½℄¸ ¸ ¸ ¾¸¾℄℄µº
ÆÓ
¹ 
 Ñ ÒÓ´ ½¸½℄¸ ¸ ¸ ¸ ¾¸¾℄℄µº
×
¹ 
 Ñ ÒÓ´ ½¸½℄¸ ¾¸ ¿¸ ¸ ¾¸¾℄℄µº
¾ ¿¸ ¾℄ ¿ ¸ ¿℄ ¿¸ ℄
¾ ¿¸ ¾℄ ¿ ¸ ¿℄ ¸ ½℄
3.6. Máximo elemento de un árbol binario 47
¾ ¿¸ ¾℄ ¿ ¸ ½℄ ¸ ¿℄
¾ ¿¸ ¾℄ ¿ ½¸ ¿℄ ¿¸ ℄
¾ ¿¸ ¾℄ ¿ ¾¸ ℄ ¸ ¿℄
¾ ¾¸ ¿℄ ¿ ¸ ¾℄ ¿¸ ℄
¾ ¾¸ ¿℄ ¿ ¿¸ ℄ ½¸ ℄
¾ ¾¸ ¿℄ ¿ ¿¸ ℄ ¸ ¿℄
¾ ¾¸ ¿℄ ¿ ¿¸ ½℄ ¸ ¿℄
¾ ¾¸ ¿℄ ¿ ½¸ ℄ ¿¸ ℄
ÆÓ
3.6. Máximo elemento de un árbol binario
Ejercicio 3.6 Un árbol binario es vacío o consta de tres partes: la raíz (que debe de ser un número
positivo), el subárbol izquierdo (que debe ser un árbol binario) y el subárbol derecho (que debe ser
un árbol binario). Usaremos la siguiente representación
Ò Ð representa el árbol vacío
Ø´Á¸Ê¸ µ representa el árbol de la raíz Ê, subárbol izquierdo Á y subárbol derecho .
Por ejemplo, Ø´Ø´Ò Ð¸¾¸Ò е¸½¸Ø´Ø´Ò и ¸Ò е¸¿¸Ò еµ representa el árbol
½
»
¾ ¿
»
Definir la relación Ñ Ü ÑÓ´·Ì¸¹ µ que se verifique si es el máximo de los nodos del árbol Ì.
Por ejemplo,
¹ Ñ Ü ÑÓ´Ò Ð¸Æµº
Æ ¼
¹ Ñ Ü ÑÓ´Ø´Ò Ð¸¾¸Ò е¸Æµº
Æ ¾
¹ Ñ Ü ÑÓ´Ø´Ø´Ò Ð¸¾¸Ò е¸¿¸Ò е¸Æµº
Æ ¿
Solución: La definición de Ñ Ü ÑÓ es
Ñ Ü ÑÓ´Ò Ð¸¼µº
Ñ Ü ÑÓ´Ø´Á¸Ê¸ µ¸Åµ ¹
Ñ Ü ÑÓ´Á¸ÅÁµ¸
48 Capítulo 3. Estructuras
Ñ Ü ÑÓ´ ¸Å µ¸
Ž × Ñ Ü´ÅÁ¸Å µ¸
Å × Ñ Ü´Ê¸Å½µº
Capítulo 4
Retroceso, corte y negación
4.1. Ejemplos de uso del corte
Ejercicio 4.1 1. Definir la relación ´ ¸ µ de forma que:
si < ¿, entonces = ¼;
si ¿ ≤ < , entonces = ¾;
si ≤ , entonces = .
2. Construir el árbol de deducción correspondiente a la cuestión
¹ ´½¸ µ¸ ¾ º
3. Definir la relación ½´ ¸ µ a partir de la definición de ´ ¸ µ, introduciendo un corte
al final de las dos primeras cláusulas.
4. Construir el árbol de deducción correspondiente a la cuestión
¹ ½´½¸ µ¸ ¾ º
5. Construir el árbol de deducción correspondiente a la cuestión
¹ ½´ ¸ µº
6. En el árbol anterior se observa que se efectúan comparaciones innecesarias (por ejemplo,
después de fallar la comparación ¿, efectúa la comparación ¿ ). Definir la relación
¾´ ¸ µ suprimiendo en la definición de ½´ ¸ µ las comparaciones innecesarias.
7. Construir el árbol de deducción correspondiente a la cuestión
¹ ¾´ ¸ µº
49
50 Capítulo 4. Retroceso, corte y negación
8. Construir el árbol de deducción correspondiente a la cuestión
¹ ¾´½¸ µ¸ ¾ º
9. Definir la relación ¿´ ¸ µ a partir de la definición de ¾´ ¸ µ, suprimiendo los cortes.
10. Obtener las respuestas correspondientes a la cuestión
¹ ¿´½¸ µº
Solución: Solución del apartado 1: La definición de es
´ ¸¼µ ¹ ¿º
´ ¸¾µ ¹ ¿ ¸ º
´ ¸ µ ¹ º
Solución del apartado 2: El árbol de deducción se muestra en la figura 4.1 (página
50).
1<3, 2<0 3 =< 1, 1<6, 2<2 6 =< 1, 2<4
f(1,Y), 2<Y
{X/1, Y/2}
{X/1, Y/0} {X/1, Y/4}
2<0
Fallo
Fallo Fallo
Figura 4.1: Árbol de resolución del apartado 2
Solución del apartado 3: La definición de ½ es
½´ ¸¼µ ¹ ¿¸ º
½´ ¸¾µ ¹ ¿ ¸ ¸ º
½´ ¸ µ ¹ º
Solución del apartado 4: El árbol de deducción se muestra en la figura 4.2 (página
51).
Solución del apartado 5: El árbol de deducción se muestra en la figura 4.3 (página
51).
Solución del apartado 6: La definición de ¾ es
4.1. Ejemplos de uso del corte 51
{X/1, Y/0}
1<3, !, 2<0
!, 2<0
2<0
Fallo
f_1(1,Y), 2<Y
Figura 4.2: Árbol de resolución del apartado 4
3 =< 7, 7<6, ! 6 =< 77<3, !
Exito
{Y/4}
f_1(7,Y)
{X/7, Y/2}
{X/7, Y/0} {X/7, Y/4}
Fallo
7<6, !
Fallo
Figura 4.3: Árbol de resolución del apartado 5
52 Capítulo 4. Retroceso, corte y negación
¾´ ¸¼µ ¹ ¿¸ º
¾´ ¸¾µ ¹ ¸ º
¾´ ¸ µº
Solución del apartado 7: El árbol de deducción se muestra en la figura 4.4 (página
52).
7<3, !
Exito
{Y/4}
f_1(7,Y)
{X/7, Y/2}
{X/7, Y/0} {X/7, Y/4}
Fallo
7<6, !
Fallo
Figura 4.4: Árbol de resolución del apartado 7
Solución del apartado 8: El árbol de deducción se muestra en la figura 4.5 (página
52).
{X/1, Y/0}
1<3, !, 2<0
!, 2<0
2<0
Fallo
f_2(1,Y), 2<Y
Figura 4.5: Árbol de resolución del apartado 8
Solución del apartado 9: La definición de ¿ es
4.2. Árboles de deducción de Ñ Ñ Ö
 53
¿´ ¸¼µ ¹ ¿º
¿´ ¸¾µ ¹ º
¿´ ¸ µº
Solución del apartado 10: Las respuestas son
¹ ¿´½¸ µº
¼
¾
ÆÓ
4.2. Árboles de deducción de Ñ Ñ Ö
Ejercicio 4.2 La relación Ñ Ñ Ö
 está definida por
Ñ Ñ Ö
 ´ ¸ ℄µ ¹ º
Ñ Ñ Ö
 ´ ¸ Ä℄µ ¹ Ñ Ñ Ö
 ´ ¸Äµº
Escribir los árboles de SLD resolución correspondientes a las siguientes preguntas
1. ¹ Ñ Ñ Ö
 ´ ¸ ¸ ¸
℄µ¸ º
2. ¹ Ñ Ñ Ö
 ´ ¸ ¸ ¸
℄µ¸ º
3. ¹ ¸ Ñ Ñ Ö
 ´ ¸ ¸ ¸
℄µº
Solución:
4.3. Diferencia de conjuntos
Ejercicio 4.3 Definir la relación Ö Ò
 ´· ½¸· ¾¸¹ ¿µ que se verifique si ¿ es la dife-
rencia de los conjuntos ½ y ¾. Por ejemplo,
¹ Ö Ò
 ´ ¸ ℄¸ ¸
℄¸ µº
℄
ÆÓ
Definir una versión con negación ( Ö Ò
 ½) y otra con corte ( Ö Ò
 ¾) y comparar
la eficiencia de las distintas definiciones con el ejemplo
¹ ÒÙÑÐ ×Ø´½¸½¼¼¼¸ Ľµ¸ Ø Ñ ´ Ö Ò
 ½´ Ľ¸ Ľµµº
¹ ÒÙÑÐ ×Ø´½¸½¼¼¼¸ Ľµ¸ Ø Ñ ´ Ö Ò
 ¾´ Ľ¸ Ľµµº
54 Capítulo 4. Retroceso, corte y negación
!
Resp.: X=b
{X/a}
!, a=a.
a=a
Resp.: X=a
memberchk(X,[a,b,c]), X=a. memberchk(X,[a,b,c]), X=b.
{X/a}
!, a=b.
a=b
Fallo
X=b, memberchk(X,[a,b,c]).
{X/b}
memberchk(b,[a,b,c]).
memberchk(b,[b,c]).
Figura 4.6: Árbol de resolución Ñ Ñ Ö
Nota: La relación Ö Ò
 se corresponde con la relación definida ×Ù ØÖ 
Ø.
Solución: 1a definición (con negación):
Ö Ò
 ½´ ℄¸ ¸ ℄µº
Ö Ò
 ½´ Ä℄¸Ä¾¸Ä¿µ ¹
Ñ Ñ Ö´ ¸Ä¾µ¸
Ö Ò
 ½´Ä¸Ä¾¸Ä¿µº
Ö Ò
 ½´ Ä℄¸Ä¾¸ Ä¿℄µ ¹
ÒÓØ´Ñ Ñ Ö´ ¸Ä¾µµ¸
Ö Ò
 ½´Ä¸Ä¾¸Ä¿µº
2a definición (con corte):
Ö Ò
 ¾´ ℄¸ ¸ ℄µº
Ö Ò
 ¾´ Ä℄¸Ä¾¸Ä¿µ ¹
Ñ Ñ Ö´ ¸Ä¾µ¸ ¸
Ö Ò
 ¾´Ä¸Ä¾¸Ä¿µº
Ö Ò
 ¾´ Ä℄¸Ä¾¸ Ä¿℄µ ¹
± ÒÓØ´Ñ Ñ Ö´ ¸Ä¾µµ¸
Ö Ò
 ¾´Ä¸Ä¾¸Ä¿µº
3a definición (con corte y memberchk):
4.4. Agregación de un elemento a un conjunto 55
Ö Ò
 ¿´ ℄¸ ¸ ℄µº
Ö Ò
 ¿´ Ä℄¸Ä¾¸Ä¿µ ¹
Ñ Ñ Ö
 ´ ¸Ä¾µ¸ ¸
Ö Ò
 ¿´Ä¸Ä¾¸Ä¿µº
Ö Ò
 ¿´ Ä℄¸Ä¾¸ Ä¿℄µ ¹
± ÒÓØ´Ñ Ñ Ö
 ´ ¸Ä¾µµ¸
Ö Ò
 ¿´Ä¸Ä¾¸Ä¿µº
Comparaciones:
¹ ÒÙÑÐ ×Ø´½¸½¼¼¼¸ Ľµ¸ Ø Ñ ´ Ö Ò
 ½´ Ľ¸ Ľ¸ ℄µµº
± ¼½¸ ¼½ Ò Ö Ò
 ׸ ¼¸¾ ÈÍ Ò ¼¸¾ × 
ÓÒ × ´ ± È͸ ¾¼ Ä Ô×µ
¹ ÒÙÑÐ ×Ø´½¸½¼¼¼¸ Ľµ¸ Ø Ñ ´ Ö Ò
 ¾´ Ľ¸ Ľ¸ ℄µµº
± ¼½¸ ¼½ Ò Ö Ò
 ׸ ¼¸¾ ÈÍ Ò ¼¸¾ × 
ÓÒ × ´ ± È͸ ¾¼¼ ¼¼ Ä Ô×µ
¹ ÒÙÑÐ ×Ø´½¸½¼¼¼¸ Ľµ¸ Ø Ñ ´ Ö Ò
 ¿´ Ľ¸ Ľ¸ ℄µµº
± ¾¸¼¼½ Ò Ö Ò
 ׸ ¼¸¼ ÈÍ Ò ¼¸¼ × 
ÓÒ × ´ ± È͸ ¾ Ä Ô×µ
¹ ÒÙÑÐ ×Ø´½¸½¼¼¼¸ Ľµ¸ Ø Ñ ´×Ù ØÖ 
Ø´ Ľ¸ Ľ¸ ℄µµº
± ¾¸¼¼½ Ò Ö Ò
 ׸ ¼¸¼ ÈÍ Ò ¼¸¼ × 
ÓÒ × ´½¼ ± È͸ ¾ ¼½¾ Ä Ô×µ
4.4. Agregación de un elemento a un conjunto
Ejercicio 4.4 Definir la relación Ö Ö´· ¸·Ä¸¹Ä½µ que se verifique si Ľ es la lista obtenida
añadiéndole a Ä, si no pertenece a Ä y es Ä en caso contrario. Por ejemplo,
¹ Ö Ö´ ¸ ¸
℄¸Äµº
Ä ¸ ¸
℄
¹ Ö Ö´ ¸ ¸
℄¸Äµº
Ä ¸
℄
Hacer una versión con negación y otra con corte.
Solución: 1a definición (con negación):
Ö Ö ½´ ¸Ä¸Äµ ¹
Ñ Ñ Ö´ ¸Äµº
Ö Ö ½´ ¸Ä¸ Ä℄µ ¹
ÒÓØ´Ñ Ñ Ö´ ¸Äµµº
2a definición (con corte):
Ö Ö ¾´ ¸Ä¸Äµ ¹
Ñ Ñ Ö´ ¸Äµ¸ º
Ö Ö ¾´ ¸Ä¸ Ä℄µº
56 Capítulo 4. Retroceso, corte y negación
4.5. Separación de una lista de números en positivos y ne-
gativos
Ejercicio 4.5 Definir la relación × Ô Ö ´·Ä½¸·Ä¾¸¹Ä¿µ que separa la lista de números Ľ en
dos listas: ľ formada por los números positivos y Ä¿ formada por los números negativos o cero.
Por ejemplo,
¹ × Ô Ö ´ ¾¸¼¸¹¿¸ ¸¼¸¾℄¸Ä¾¸Ä¿µº
ľ ¾¸ ¸ ¾℄
Ä¿ ¼¸ ¹¿¸ ¼℄
×
Proponer dos soluciones, una sin corte y otra con corte.
Solución: Definición con negación:
× Ô Ö ½´ ℄¸ ℄¸ ℄µº
× Ô Ö ½´ Æ ÊĽ℄¸ Æ Êľ℄¸Ä¿µ ¹
Æ ¼¸
× Ô Ö ½´ÊĽ¸Êľ¸Ä¿µº
× Ô Ö ½´ Æ ÊĽ℄¸Ä¾¸ Æ ÊÄ¿℄µ ¹
Æ ¼¸
× Ô Ö ½´ÊĽ¸Ä¾¸ÊÄ¿µº
Definición con corte:
× Ô Ö ¾´ ℄¸ ℄¸ ℄µº
× Ô Ö ¾´ Æ ÊĽ℄¸ Æ Êľ℄¸Ä¿µ ¹
Æ ¼¸ ¸
× Ô Ö ¾´ÊĽ¸Êľ¸Ä¿µº
× Ô Ö ¾´ Æ ÊĽ℄¸Ä¾¸ Æ ÊÄ¿℄µ ¹
± Æ ¼¸
× Ô Ö ¾´ÊĽ¸Ä¾¸ÊÄ¿µº
4.6. Suma de los números pares de una lista de números
Ejercicio 4.6 Definir la relación ×ÙÑ Ô Ö ×´·Ä¸¹Æµ que se verifica si Æ es la suma de todos
los números pares de la lista de números Ä. Por ejemplo,
¹ ×ÙÑ Ô Ö ×´ ¾¸¿¸ ℄¸Æµº
Æ
¹ ×ÙÑ Ô Ö ×´ ½¸¿¸ ¸ ¸ ¸½½¸¾ ℄¸Æµº
Æ ¿¼
4.6. Suma de los números pares de una lista de números 57
Hacer una versión con negación y otra con corte.
Solución:
Versión 1 (con negación):
×ÙÑ Ô Ö × ½´ ℄¸¼µº
×ÙÑ Ô Ö × ½´ Æ Ä℄¸ µ ¹
Ô Ö´Æµ¸
×ÙÑ Ô Ö × ½´Ä¸ ½µ¸
× ½ · ƺ
×ÙÑ Ô Ö × ½´ Æ Ä℄¸ µ ¹
ÒÓØ´Ô Ö´ Ƶµ¸
×ÙÑ Ô Ö × ½´Ä¸ µº
Ô Ö´Æµ ¹
Æ ÑÓ ¾ ¼º
Versión 2 (con corte):
×ÙÑ Ô Ö × ¾´ ℄¸¼µº
×ÙÑ Ô Ö × ¾´ Æ Ä℄¸ µ ¹
Ô Ö´Æµ¸ ¸
×ÙÑ Ô Ö × ¾´Ä¸ ½µ¸
× ½ · ƺ
×ÙÑ Ô Ö × ¾´ Æ Ä℄¸ µ ¹
± ÒÓØ´Ô Ö´ Ƶµ¸
×ÙÑ Ô Ö × ¾´Ä¸ µº
Versión 3 (con corte y acumulador):
×ÙÑ Ô Ö × ¿´Ä¸ µ ¹
×ÙÑ Ô Ö × ¿ Ùܴĸ¼¸ µº
×ÙÑ Ô Ö × ¿ ÙÜ´ ℄¸ 
¸ 
µº
×ÙÑ Ô Ö × ¿ ÙÜ´ Æ Ä℄¸ 
¸ µ ¹
Ô Ö´Æµ¸ ¸

½ × 
 · Ƹ
×ÙÑ Ô Ö × ¿ Ùܴĸ 
½¸ µº
×ÙÑ Ô Ö × ¿ ÙÜ´ Æ Ä℄¸ 
¸ µ ¹
± ÒÓØ´Ô Ö´ Ƶµ¸
×ÙÑ Ô Ö × ¿ Ùܴĸ 
¸ µº
58 Capítulo 4. Retroceso, corte y negación
4.7. Exponente de dos en la factorización de un número
Ejercicio 4.7 Definir la relación ÜÔÓÒ ÒØ Ó×´·Æ¸¹ µ que se verifica si es el exponen-
te de 2 en la descomposición de Æ como producto de factores primos. Por ejemplo,
¹ ÜÔÓÒ ÒØ Ó×´ ¼¸ µº
¿
¹ ÜÔÓÒ ÒØ Ó×´ ¸ µº
¼
Hacer una versión con negación y otra con corte.
Solución: 1a Versión (con negación):
ÜÔÓÒ ÒØ Ó× ½´Æ¸ µ ¹
Æ ÑÓ ¾ ¼¸
ƽ × Æ » ¾¸
ÜÔÓÒ ÒØ Ó× ½´Æ½¸ ½µ¸
× ½ · ½º
ÜÔÓÒ ÒØ Ó× ½´Æ¸¼µ ¹
Æ ÑÓ ¾ ¼º
2a Versión (con corte):
ÜÔÓÒ ÒØ Ó× ¾´Æ¸ µ ¹
Æ ÑÓ ¾ ¼¸ ¸
ƽ × Æ » ¾¸
ÜÔÓÒ ÒØ Ó× ¾´Æ½¸ ½µ¸
× ½ · ½º
ÜÔÓÒ ÒØ Ó× ¾´ ¸¼µº
4.8. Transformación de lista a conjunto
Ejercicio 4.8 Definir la relación Ð ×Ø 
ÓÒ ÙÒØÓ´·Ä¸¹ µ que se verifique si es el conjun-
to correspondiente a la lista Ä (es decir, contiene los mismos elementos que Ä en el mismo orden,
pero si Ä tiene elementos repetidos sólo se incluye en la última aparición de cada elemento). Por
ejemplo,
¹ Ð ×Ø 
ÓÒ ÙÒØÓ´ ¸ ¸ ¸ ℄¸ µº
¸ ¸ ℄
Nota: La relación Ð ×Ø 
ÓÒ ÙÒØÓ se corresponde con la relación definida Ð ×Ø ØÓ × Ø.
4.8. Transformación de lista a conjunto 59
Solución: La definición de Ð ×Ø 
ÓÒ ÙÒØÓ es
Ð ×Ø 
ÓÒ ÙÒØÓ´ ℄¸ ℄µº
Ð ×Ø 
ÓÒ ÙÒØÓ´ Ä℄¸ µ ¹
Ñ Ñ Ö´ ¸Äµ¸
Ð ×Ø 
ÓÒ ÙÒØÓ´Ä¸ µº
Ð ×Ø 
ÓÒ ÙÒØÓ´ Ä℄¸ ℄µ ¹
· Ñ Ñ Ö´ ¸Äµ¸
Ð ×Ø 
ÓÒ ÙÒØÓ´Ä¸ µº
La definición anterior puede simplificarse con cortes
Ð ×Ø 
ÓÒ ÙÒØÓ ½´ ℄¸ ℄µº
Ð ×Ø 
ÓÒ ÙÒØÓ ½´ Ä℄¸ µ ¹
Ñ Ñ Ö´ ¸Äµ¸ ¸
Ð ×Ø 
ÓÒ ÙÒØÓ ½´Ä¸ µº
Ð ×Ø 
ÓÒ ÙÒØÓ ½´ Ä℄¸ ℄µ ¹
± · Ñ Ñ Ö´ ¸Äµ¸
Ð ×Ø 
ÓÒ ÙÒØÓ ½´Ä¸ µº
3a definición (con corte y memberchk):
Ð ×Ø 
ÓÒ ÙÒØÓ ¿´ ℄¸ ℄µº
Ð ×Ø 
ÓÒ ÙÒØÓ ¿´ Ä℄¸Ä¾µ ¹
Ñ Ñ Ö
 ´ ¸Äµ¸ ¸
Ð ×Ø 
ÓÒ ÙÒØÓ ¿´Ä¸Ä¾µº
Ð ×Ø 
ÓÒ ÙÒØÓ ¿´ Ä℄¸ ľ℄µ ¹
± ÒÓØ´Ñ Ñ Ö´ ¸Äµµ¸
Ð ×Ø 
ÓÒ ÙÒØÓ ¿´Ä¸Ä¾µº
Comparaciones:
¹ ÒÙÑÐ ×Ø´½¸½¼¼¼¸ Ľµ¸ Ø Ñ ´Ð ר 
ÓÒ ÙÒØÓ ½´ Ľ¸ оµµº
± ½¸¼¼¿¸¼¼½ Ò Ö Ò
 ׸ ¼¸ ¼ ÈÍ Ò ¼¸ ½ × 
ÓÒ × ´ ± È͸ ¾ ¼ ¼¿ Ä Ô×µ
¹ ÒÙÑÐ ×Ø´½¸½¼¼¼¸ Ľµ¸ Ø Ñ ´Ð ר 
ÓÒ ÙÒØÓ ¾´ Ľ¸ оµµº
± ¼½¸ ¼½ Ò Ö Ò
 ׸ ¼¸¾ ÈÍ Ò ¼¸¾ × 
ÓÒ × ´ ¿± È͸ ½ ¾ ¼ Ä Ô×µ
¹ ÒÙÑÐ ×Ø´½¸½¼¼¼¸ Ľµ¸ Ø Ñ ´Ð ר 
ÓÒ ÙÒØÓ ¿´ Ľ¸ оµµº
± ¿¸¼¼½ Ò Ö Ò
 ׸ ¼¸¼ ÈÍ Ò ¼¸¼ × 
ÓÒ × ´ ¼± È͸ ¾ ½ Ä Ô×µ
¹ ÒÙÑÐ ×Ø´½¸½¼¼¼¸ Ľµ¸ Ø Ñ ´Ð ר ØÓ × Ø´ Ľ¸ оµµº
± ¿¸¼¼ Ò Ö Ò
 ׸ ¼¸¼ ÈÍ Ò ¼¸¼ × 
ÓÒ × ´ ¿± È͸ ¾ ½ Ä Ô×µ
60 Capítulo 4. Retroceso, corte y negación
4.9. Signos de crecimientos de sucesiones numéricas
Ejercicio 4.9 Definir la relación 
Ö 
 Ñ ÒØÓ×´·Ä½¸¹Ä¾µ que se verifique si ľ es la lista
correspondientes a los crecimientos de la lista numérica Ľ; es decir, entre cada par de elementos
consecutivos e de Ľ coloca el signo · si e y signo ¹ en caso contrario. Por ejemplo,
¹ 
Ö 
 Ñ ÒØÓ×´ ½¸¿¸¾¸¾¸ ¸¿℄¸Äµº
Ä ½¸ ·¸ ¿¸ ¹¸ ¾¸ ¹¸ ¾¸ ·¸ ¸ ¹℄
Dar una definición sin corte y otra con corte.
Solución: La definición de 
Ö 
 Ñ ÒØÓ× sin usar corte es

Ö 
 Ñ ÒØÓ× ½´ ℄¸ ℄µº

Ö 
 Ñ ÒØÓ× ½´ ¸ Ľ℄¸ ¸· ľ℄µ ¹
¸

Ö 
 Ñ ÒØÓ× ½´ Ľ℄¸Ä¾µº

Ö 
 Ñ ÒØÓ× ½´ ¸ Ľ℄¸ ¸¹ ľ℄µ ¹
¸

Ö 
 Ñ ÒØÓ× ½´ Ľ℄¸Ä¾µº
La definición de 
Ö 
 Ñ ÒØÓ× usando corte es

Ö 
 Ñ ÒØÓ× ¾´ ℄¸ ℄µº

Ö 
 Ñ ÒØÓ× ¾´ ¸ Ľ℄¸ ¸· ľ℄µ ¹
¸ ¸

Ö 
 Ñ ÒØÓ× ¾´ Ľ℄¸Ä¾µº

Ö 
 Ñ ÒØÓ× ¾´ ¸ Ľ℄¸ ¸¹ ľ℄µ ¹
± ¸

Ö 
 Ñ ÒØÓ× ¾´ Ľ℄¸Ä¾µº
4.10. Descomposición 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,
¹ Ñ ÒÓÖ Ú ×ÓÖ ÔÖÓÔ Ó´¿¼¸ µº
¾
¹ Ñ ÒÓÖ Ú ×ÓÖ ÔÖÓÔ Ó´¿¸ µº
¿
4.11. Menor elemento que cumple una propiedad 61

ØÓÖ Þ 
 Ò´·Æ¸¹Äµ que se verifique si Ä es la lista correspondiente a la descomposi-
ción del número Æ en factores primos (se considera los que elementos de Ä están ordenados
de manera creciente). Por ejemplo,
¹ 
ØÓÖ Þ 
 Ò´½¾¸Äµº
Ä ¾¸ ¾¸ ¿℄
ÆÓ
¹ 
ØÓÖ Þ 
 Ò´½¸Äµº
Ä ℄
ÆÓ
Solución: La definición de Ñ ÒÓÖ Ú ×ÓÖ ÔÖÓÔ Ó es
Ñ ÒÓÖ Ú ×ÓÖ ÔÖÓÔ Ó´Æ¸ µ ¹
ƽ × ÐÓÓÖ´×ÕÖØ´Æµµ¸
ØÛ Ò´¾¸Æ½¸ µ¸
Æ ÑÓ ¼¸ º
Ñ ÒÓÖ Ú ×ÓÖ ÔÖÓÔ Ó´Æ¸Æµº
La definición de 
ØÓÖ Þ 
 Ò es

ØÓÖ Þ 
 Ò´½¸ ℄µº

ØÓÖ Þ 
 ҴƸ Ä℄µ ¹
Æ ½¸
Ñ ÒÓÖ Ú ×ÓÖ ÔÖÓÔ Ó´Æ¸ µ¸
ƽ × Æ» ¸

ØÓÖ Þ 
 Ҵƽ¸Äµº
4.11. Menor elemento que cumple una propiedad
Ejercicio 4.11 Definir la relación 
 Ð
ÙÐ ´·Æ¸·Å¸ µ que se verifique si es el menor múlti-
plo de Æ tal que la suma de sus dígitos es mayor que Å. Por ejemplo,
¹ 
 Ð
ÙÐ ´¿¸½¼¸ µº
¿
×
¹ 
 Ð
ÙÐ ´ ¸¾¼¸ µº
¿
×
Solución: La definición de 
 Ð
ÙÐ es
62 Capítulo 4. Retroceso, corte y negación

 Ð
ÙÐ ´Æ¸Å¸ µ ¹
Ñ ÐØ ÔÐӴƸ µ¸
×ÙÑ ØÓ×´ ¸Æ½µ¸
ƽ Ÿ º
La relación Ñ ÐØ ÔÐÓ´·Æ¸¹ µ se verifica si es un múltiplo de Æ. Por ejemplo,
¹ Ñ ÐØ ÔÐÓ´ ¸ µº
½¼
½
×
Ñ ÐØ ÔÐӴƸƵº
Ñ ÐØ ÔÐӴƸŵ ¹
Ñ ÐØ ÔÐӴƸƽµ¸
Å × Æ·Æ½º
La relación ×ÙÑ ØÓ×´·Æ¸¹Ëµ se verifica si Ë es la suma de los dígitos del nú-
mero Æ. Por ejemplo,
¹ ×ÙÑ ØÓ×´¾¿ ¸Ëµº
Ë ½¾
×ÙÑ ØÓ״ƸƵ ¹
Æ ½¼¸ º
×ÙÑ ØÓ״Ƹ˵ ¹
± Æ ½¼¸
ƽ × Æ »» ½¼¸
Ê × Æ ¹ ½¼¶Æ½¸
×ÙÑ ØÓ״ƽ¸Ë½µ¸
Ë × Ë½ · ʺ
4.12. Números libres de cuadrados
Ejercicio 4.12 Un número es libre de cuadrados si no es divisible por el cuadrado de ningún nú-
mero mayor que 1. Definir la relación Ð Ö 
Ù Ö Ó×´·Æµ que se verifique si el número
Æ es libre de cuadrados. Por ejemplo,
4.13. Suma de los números libres de cuadrados 63
¹ Ð Ö 
Ù Ö Ó×´¿¼µº
×
¹ Ð Ö 
Ù Ö Ó×´½¾µº
ÆÓ
Solución: La definición de Ð Ö 
Ù Ö Ó× es
Ð Ö 
Ù Ö Ó״Ƶ ¹
Å × ÐÓÓÖ´×ÕÖØ´Æµµ¸
ÒÓØ´´ ØÛ Ò´¾¸Å¸ µ¸ Æ ÑÓ ´ ¶ µ ¼µµº
4.13. Suma de los números libres de cuadrados
Ejercicio 4.13 Definir la relación ×ÙÑ Ð Ö × 
Ù Ö Ó×´·Ä¸¹Ëµ que se verifique si Ë
es la suma de los números libres de cuadrados la lista numérica Ä. Por ejemplo,
¹ ×ÙÑ Ð Ö × 
Ù Ö Ó×´ ¸½¾¸½ ¸¿¼℄¸Ëµº
Ë ¿
Nota: Dar dos definiciones, una con negación y otra con corte.
Solución: La definición de ×ÙÑ Ð Ö × 
Ù Ö Ó× usando la negación es
×ÙÑ Ð Ö × 
Ù Ö Ó× ½´ ℄¸¼µº
×ÙÑ Ð Ö × 
Ù Ö Ó× ½´ Ä℄¸Ëµ ¹
Ð Ö 
Ù Ö Ó×´ µ¸
×ÙÑ Ð Ö × 
Ù Ö Ó× ½´Ä¸Ë½µ¸
Ë × ·Ë½º
×ÙÑ Ð Ö × 
Ù Ö Ó× ½´ Ä℄¸Ëµ ¹
ÒÓØ´Ð Ö 
Ù Ö Ó×´ µµ¸
×ÙÑ Ð Ö × 
Ù Ö Ó× ½´Ä¸Ëµº
y la definición usando corte es
×ÙÑ Ð Ö × 
Ù Ö Ó× ¾´ ℄¸¼µº
×ÙÑ Ð Ö × 
Ù Ö Ó× ¾´ Ä℄¸Ëµ ¹
Ð Ö 
Ù Ö Ó×´ µ¸ ¸
×ÙÑ Ð Ö × 
Ù Ö Ó× ¾´Ä¸Ë½µ¸
Ë × ·Ë½º
×ÙÑ Ð Ö × 
Ù Ö Ó× ¾´ Ä℄¸Ëµ ¹
± ÒÓØ´Ð Ö 
Ù Ö Ó×´ µµ¸
×ÙÑ Ð Ö × 
Ù Ö Ó× ¾´Ä¸Ëµº
64 Capítulo 4. Retroceso, corte y negación
4.14. Máximo número de una lista
Ejercicio 4.14 Definir la relación Ñ Ü Ð ×Ø ´·Ä¸¹Æµ que se verifique si Æ es el mayor número
de la lista Ä. Por ejemplo,
¹ Ñ Ü Ð ×Ø ´ ¾¸ ¾¿¸ ¸ · ℄¸Æµº
Æ
¹ Ñ Ü Ð ×Ø ´ ¹¾¸ ¾¿¸¹ ¸ · ℄¸Æµº
Æ ¹¾
¹ Ñ Ü Ð ×Ø ´ ¾¿¸ · ℄¸Æµº
ÆÓ
Solución: La definición de Ñ Ü Ð ×Ø es
Ñ Ü Ð ×Ø ´Ä¸Åµ ¹
Ñ Ñ Ö´Å¸Äµ¸
ÒÙÑ Ö´Åµ¸
ÒÓØ´´Ñ Ñ Ö´Æ¸Äµ¸
ÒÙÑ Ö´Æµ¸
Æ Åµµº
4.15. Longitud de las subsucesiones comunes maximales
Ejercicio 4.15 Definir la relación ÐÓÒ ØÙ ×
Ñ´·Ä½¸·Ä¾¸¹Æµ que se verifique si Æ es la lon-
gitud de las subsucesiones comunes maximales de las listas Ľ y ľ. Por ejemplo,
¹ ÐÓÒ ØÙ ×
Ñ´ ¾¸½¸ ¸ ¸¾¸¿¸ ¸¾¸ ¸¿℄¸ ½¸ ¸ ¸¿¸¾℄¸Æµº
Æ
ÆÓ
ya que ½¸ ¸¿¸¾℄ es una subsucesión de las dos listas y no poseen ninguna otra subsucesión
común de mayor longitud. Obsérvese que los elementos de la subsucesión no son necesariamente
elementos adyacentes en las listas.
Solución: La definición de ÐÓÒ ØÙ ×
Ñ es
ÐÓÒ ØÙ ×
Ñ´ ℄¸ ¸¼µº
ÐÓÒ ØÙ ×
Ñ´ ¸ ℄¸¼µº
ÐÓÒ ØÙ ×
Ñ´ Ľ℄¸ ľ℄¸Æµ ¹
¸ ÐÓÒ ØÙ ×
ѴĽ¸Ä¾¸Åµ¸
Æ × Å·½º
ÐÓÒ ØÙ ×
Ñ´ Ľ℄¸ ľ℄¸Æµ ¹
4.16. Elementos repetidos en una lista 65
± ¸
ÐÓÒ ØÙ ×
ѴĽ¸ ľ℄¸Æ½µ¸
ÐÓÒ ØÙ ×
Ñ´ Ľ℄¸Ä¾¸Æ¾µ¸
Æ × Ñ Ü´Æ½¸Æ¾µº
4.16. Elementos repetidos en una lista
Ejercicio 4.16 Definir la relación Ö Ô Ø Ó´¹ ¸·Äµ que se verifique si el elemento está repe-
tido (i.e. ocurre más de una vez) en la lista Ä. Por ejemplo,
¹ Ö Ô Ø Ó´ ¸ ½¸¾¸½¸¿¸ ¸¿℄µº
½
½
¿
¿
ÆÓ
¹ Ö Ô Ø Ó´ ¸ ½¸¾¸ ℄µº
ÆÓ
Solución: La definición de Ö Ô Ø Ó es
Ö Ô Ø Ó´ ¸Äµ ¹
× Ð 
Ø´ ¸Ä¸Êµ¸
Ñ Ñ Ö
 ´ ¸Êµº
Ejercicio 4.17 Defimir la relación Ð Ñ Ò ´· ¸·Ä½¸¹Ä¾µ que se verifique si ľ es la lista ob-
tenida eliminando todas las ocurrencias de en la lista Ľ. Por ejemplo,
¹ Ð Ñ Ò ´ ¸ ½¸ ¸ ¸¿¸ ¸ ¸ ¸ ¸
℄¸Äµº
Ä ½¸ ¸ ¿¸ ¸ 
℄
Solución: La definición de Ð Ñ Ò es
Ð Ñ Ò ´ ¸ ℄¸ ℄µº
Ð Ñ Ò ´ ¸ Ľ℄¸Ä¾µ ¹
Ð Ñ Ò ´ ¸Ä½¸Ä¾µº
Ð Ñ Ò ´ ¸ Ľ℄¸ ľ℄µ ¹
¸
Ð Ñ Ò ´ ¸Ä½¸Ä¾µº
Ejercicio 4.18 Definir la relación Ö Ô Ø Ó×´·Ä½¸¹Ä¾µ que se verifique si ľ es la lista de los
elementos repetidos de la lista Ľ. Por ejemplo,
66 Capítulo 4. Retroceso, corte y negación
¹ Ö Ô Ø Ó× ½´ ½¸¾¸ ¸¿¸ ¸½¸¿¸ ℄¸Äµº
Ä ½¸ ¸ ¿℄
Solución: La primera definición de Ö Ô Ø Ó× es
Ö Ô Ø Ó× ½´ ℄¸ ℄µº
Ö Ô Ø Ó× ½´ Ľ℄¸ ľ℄µ ¹
Ñ Ñ Ö
 ´ ¸Ä½µ¸
Ð Ñ Ò ´ ¸Ä½¸Ä¿µ¸
Ö Ô Ø Ó× ½´Ä¿¸Ä¾µº
Ö Ô Ø Ó× ½´ Ľ℄¸Ä¾µ ¹
ÒÓØ´Ñ Ñ Ö
 ´ ¸Ä½µµ¸
Ö Ô Ø Ó× ½´Ä½¸Ä¾µº
con cortes se transforma en
Ö Ô Ø Ó× ¾´ ℄¸ ℄µº
Ö Ô Ø Ó× ¾´ Ľ℄¸ ľ℄µ ¹
Ñ Ñ Ö
 ´ ¸Ä½µ¸ ¸
Ð Ñ Ò ´ ¸Ä½¸Ä¿µ¸
Ö Ô Ø Ó× ¾´Ä¿¸Ä¾µº
Ö Ô Ø Ó× ¾´ Ľ℄¸Ä¾µ ¹
± ÒÓØ´Ñ Ñ Ö
 ´ ¸Ä½µµ¸
Ö Ô Ø Ó× ¾´Ä½¸Ä¾µº
4.17. Subconjunto maximal
Ejercicio 4.19 Definir la relación ×Ù 
ÓÒ ÙÒØÓ Ñ Ü Ñ Ð´·Ä½¸¹Ä¾µ que se verifica si ľ es
un subconjunto maximal de Ľ (es decir, es un conjunto de elementos de Ľ tal que sólo existe
un elemento de Ľ que no pertenece a ľ). Por ejemplo,
¹ ×Ù 
ÓÒ ÙÒØÓ Ñ Ü Ñ Ð´ 
¸ ¸ ¸ ¸
¸ ¸
℄¸Äµº
Ä ¸ 
℄
Ä ¸ 
℄
Ä ¸ ℄
ÆÓ
Solución: La definición de ×Ù 
ÓÒ ÙÒØÓ Ñ Ü Ñ Ð es
×Ù 
ÓÒ ÙÒØÓ Ñ Ü Ñ Ð´Ä½¸Ä¾µ ¹
Ð ×Ø ØÓ × Ø´Ä½¸Ä¿µ¸
× Ð 
Ø´ ¸Ä¿¸Ä¾µº
4.18. Suma de los elementos con posiciones múltiplos de n 67
Nota: La relación Ð ×Ø ØÓ × Ø se corresponde con la relación Ð ×Ø 
ÓÒ ÙÒØÓ
definida en la página 59.
4.18. Suma de los elementos con posiciones múltiplos de
n
Ejercicio 4.20 Definir la relación ×ÙÑ ÔÓ× 
 ÓÒ ×´·Æ¸·Ä¸¹Ëµ que se verifique si Ë es la
suma de los elementos de la lista que ocupan las posiciones que son múltiplos de Æ. Por ejemplo,
¹×ÙÑ ÔÓ× 
 ÓÒ ×´¾¸ ¿¸ ¸ ¸ ¸½¸¾℄¸Ëµº
Ë ½
¹ ×ÙÑ ÔÓ× 
 ÓÒ ×´¿¸ ¿¸ ¸ ¸ ¸½¸¾℄¸Ëµº
Ë
Solución: La definición de ×ÙÑ ÔÓ× 
 ÓÒ × es
×ÙÑ ÔÓ× 
 ÓÒ ×´Æ¸Ä¸Ëµ ¹
Ð Ñ ÒØÓ Ý Ö ×ØÓ´Æ¸Ä¸ ¸Ä½µ¸ ¸
×ÙÑ ÔÓ× 
 ÓÒ ×´Æ¸Ä½¸Ë½µ¸
Ë × ·Ë½º
×ÙÑ ÔÓ× 
 ÓÒ ×´ ¸ ¸¼µº
donde Ð Ñ ÒØÓ Ý Ö ×ØÓ´·Æ¸·Ä½¸¹ ¸¹Ä¾µ se verifica si es el elemento Æ–ésimo de Ľ
y ľ es la lista Ľ a partir del elemento . Por ejemplo,
¹ Ð Ñ ÒØÓ Ý Ö ×ØÓ´¿¸ ¿¸ ¸ ¸ ¸½¸¾℄¸ ¸Äµº
Ä ¸ ½¸ ¾℄
La definición de Ð Ñ ÒØÓ Ý Ö ×ØÓ es
Ð Ñ ÒØÓ Ý Ö ×ØÓ´Æ¸Ä½¸ ¸Ä¾µ ¹
Ð Ò Ø ´Ä¸Æµ¸
ÔÔ Ò ´Ä¸Ä¾¸Ä½µ¸
Ð ×Ø´Ä¸ µº
4.19. Compresión de listas
Ejercicio 4.21 Definir la relación 
ÓÑÔÖ Ñ ´·Ä½¸¹Ä¾µ que se verifique si ľ es la lista obte-
nida sustituyendo cada sucesión de un elemento de Ľ por dicho elemento. Por ejemplo,
68 Capítulo 4. Retroceso, corte y negación
¹ 
ÓÑÔÖ Ñ ´ ¸ ¸ ¸ ¸ ¸ ¸
¸
¸ ¸ ¸ ℄¸Äµº
Ä ¸ ¸ ¸ 
¸ ℄
Solución: Vamos a presentar dos definiciones. La primera definición de 
ÓÑÔÖ Ñ
es

ÓÑÔÖ Ñ ´ ℄¸ ℄µº

ÓÑÔÖ Ñ ´ ℄¸ ℄µº

ÓÑÔÖ Ñ ´ ¸ Ľ℄¸Ä¾µ ¹

ÓÑÔÖ Ñ ´ Ľ℄¸Ä¾µº

ÓÑÔÖ Ñ ´ ¸ Ľ℄¸ ľ℄µ ¹
¸

ÓÑÔÖ Ñ ´ Ľ℄¸Ä¾µº
En la segunda definición se usa el corte

ÓÑÔÖ Ñ ¾´ ℄¸ ℄µº

ÓÑÔÖ Ñ ¾´ ℄¸ ℄µº

ÓÑÔÖ Ñ ¾´ ¸ Ľ℄¸Ä¾µ ¹
¸ ¸

ÓÑÔÖ Ñ ¾´ Ľ℄¸Ä¾µº

ÓÑÔÖ Ñ ¾´ ¸ Ľ℄¸ ľ℄µ ¹
± ¸

ÓÑÔÖ Ñ ¾´ Ľ℄¸Ä¾µº
4.20. Empaquetamiento de listas
Ejercicio 4.22 Definir la relación ÑÔ ÕÙ Ø ´·Ä½¸¹Ä¾µ que se verifique si ľ es la lista
obtenida sustituyendo cada sucesión de un elemento de Ľ por la lista formada por dicha sucesión.
Por ejemplo,
¹ ÑÔ ÕÙ Ø ´ ¸ ¸ ¸ ¸ ¸ ¸
¸
¸ ¸ ¸ ℄¸Äµº
Ä ℄¸ ¸ ℄¸ ¸ ¸ ℄¸ 
¸ 
℄¸ ¸ ¸ ℄℄
Solución: La definición de ÑÔ ÕÙ Ø es
ÑÔ ÕÙ Ø ´ ℄¸ ℄µº
ÑÔ ÕÙ Ø ´ Ľ℄¸ ľ Ä¿℄µ ¹
ÑÔ ÕÙ Ø ÙÜ´ ¸Ä½¸Ä ¸Ä¾µ¸
ÑÔ ÕÙ Ø ´Ä ¸Ä¿µº
4.21. Codificación por longitud 69
La relación ÑÔ ÕÙ Ø ÙÜ´ ¸Ä½¸Ä ¸Ä¾µ se verifica si Ä es la lista obtenida eli-
minando en Ľ todas las ocurrencias iniciales de y ľ es la lista formada por y las
ocurrencias iniciales de en Ľ; por ejemplo,
¹ ÑÔ ÕÙ Ø ÙÜ´ ¸ ¸ ¸
¸
¸ ¸ ¸ ℄¸Ä ¸Ä¾µº
Ä 
¸ 
¸ ¸ ¸ ℄
ľ ¸ ¸ ℄
La definición de ÑÔ ÕÙ Ø ÙÜ es
ÑÔ ÕÙ Ø ÙÜ´ ¸ ℄¸ ℄¸ ℄µº
ÑÔ ÕÙ Ø ÙÜ´ ¸ Ľ℄¸Ä ¸ ľ℄µ ¹
ÑÔ ÕÙ Ø ÙÜ´ ¸Ä½¸Ä ¸Ä¾µº
ÑÔ ÕÙ Ø ÙÜ´ ¸ Ľ℄¸ Ľ℄¸ ℄µ ¹
º
La definición anterior puede transformarse introduciendo corte en
ÑÔ ÕÙ Ø ÙÜ ¾´ ¸ ℄¸ ℄¸ ℄µº
ÑÔ ÕÙ Ø ÙÜ ¾´ ¸ Ľ℄¸Ä ¸ ľ℄µ ¹
¸
ÑÔ ÕÙ Ø ÙÜ ¾´ ¸Ä½¸Ä ¸Ä¾µº
ÑÔ ÕÙ Ø ÙÜ ¾´ ¸ Ľ℄¸ Ľ℄¸ ℄µº
4.21. Codificación por longitud
Ejercicio 4.23 Definir la relación 
Ó 
 ´·Ä½¸¹Ä¾µ que se verifique si ľ es la codifica-
ción por longitud de la lista Ľ; es decir, las sucesiones de un mismo elemento de Ľ se codifican
por términos de la forma ƹ donde Æ es la longitud de la sucesión. Por ejemplo,
¹ 
Ó 
 ´ ¸ ¸ ¸ ¸ ¸ ¸
¸
¸ ¸ ¸ ℄¸Äµº
Ä ½¹ ¸ ¾¹ ¸ ¿¹ ¸ ¾¹
¸ ¿¹ ℄
(Indicación: Usar la relación ÑÔ ÕÙ Ø (4.20)).
Solución: La definición de 
Ó 
 es

Ó 
 ´Ä½¸Ä¾µ ¹
ÑÔ ÕÙ Ø ´Ä½¸Äµ¸

Ó 
 Ùܴĸľµº
70 Capítulo 4. Retroceso, corte y negación
La relación 
Ó 
 ÙÜ´·Ä½¸¹Ä¾µ se verifica si, suponiendo que Ľ es una lista
de la forma ½¸ººº¸ ½℄¸ººº¸ Ѹºººº Ñ℄℄), ľ es la lista ƽ¹ ½¸ºººÆÑ¹ Ñ℄ donde
Æ es la longitud de ¸ººº¸ ℄. Por ejemplo.
¹ 
Ó 
 ÙÜ´ ℄¸ ¸ ℄¸ ¸ ¸ ℄¸ 
¸
℄¸ ¸ ¸ ℄℄¸Äµº
Ä ½¹ ¸ ¾¹ ¸ ¿¹ ¸ ¾¹
¸ ¿¹ ℄
La definición de 
Ó 
 ÙÜ es

Ó 
 ÙÜ´ ℄¸ ℄µº

Ó 
 ÙÜ´ ℄ Ľ℄¸ ƹ ľ℄µ ¹
Ð Ò Ø ´ ℄¸Æµ¸

Ó 
 ÙܴĽ¸Ä¾µº
4.22. Codificación reducida por longitud
Ejercicio 4.24 Definir la relación 
Ó 
 Ö Ù
 ´·Ä½¸¹Ä¾µ que se verifique si ľ es
la codificación reducida por longitud de la lista Ľ; es decir, las sucesiones de un mismo elemento
de Ľ se codifican por términos de la forma ƹ donde Æ es la longitud de la sucesión cuando Æ
es mayor que 1 y por cuando Æ es igual a 1. Por ejemplo,
¹ 
Ó 
 Ö Ù
 ´ ¸ ¸ ¸ ¸ ¸ ¸
¸ ¸ ¸ ℄¸Äµº
Ä ¸ ¾¹ ¸ ¿¹ ¸ 
¸ ¿¹ ℄
(Indicación: Usar la relación 
Ó 
 (4.21)).
Solución: La definición de 
Ó 
 Ö Ù
 es

Ó 
 Ö Ù
 ´Ä½¸Ä¾µ ¹

Ó 
 ´Ä½¸Äµ¸

Ó 
 Ö Ù
 Ùܴĸľµº
La relación 
Ó 
 Ö Ù
 ÙÜ´·Ä½¸¹Ä¾µ se verifica si ľ es la lista obtenida
transformando los elementos de Ľ de la forma ½¹ por y dejando los restantes elemen-
tos de la misma forma (se supone que Ľ es una lista de la forma ƽ¹ ½¸ººº¸ÆÑ¹ Ñ℄).
Por ejemplo,
¹ 
Ó 
 Ö Ù
 ÙÜ´ ½¹ ¸¾¹ ¸¿¹ ¸½¹
¸¿¹ ℄¸Äµº
Ä ¸ ¾¹ ¸ ¿¹ ¸ 
¸ ¿¹ ℄
La definición de 
Ó 
 Ö Ù
 ÙÜ es
4.23. Decodificación de lista 71

Ó 
 Ö Ù
 ÙÜ´ ℄¸ ℄µº

Ó 
 Ö Ù
 ÙÜ´ ½¹ Ľ℄¸ ľ℄µ ¹

Ó 
 Ö Ù
 ÙܴĽ¸Ä¾µº

Ó 
 Ö Ù
 ÙÜ´ ƹ Ľ℄¸ ƹ ľ℄µ ¹
Æ ½¸

Ó 
 Ö Ù
 ÙܴĽ¸Ä¾µº
La definición anterior puede simplificarse introduciendo un corte:

Ó 
 Ö Ù
 ÙÜ´ ℄¸ ℄µº

Ó 
 Ö Ù
 ÙÜ´ ½¹ Ľ℄¸ ľ℄µ ¹
¸

Ó 
 Ö Ù
 ÙܴĽ¸Ä¾µº

Ó 
 Ö Ù
 ÙÜ´ ƹ Ľ℄¸ ƹ ľ℄µ ¹
± Æ ½¸

Ó 
 Ö Ù
 ÙܴĽ¸Ä¾µº
4.23. Decodificación de lista
Ejercicio 4.25 Definir la relación 
Ó 
 ´·Ä½¸¹Ä¾µ que, dada la lista Ľ, devuelve la
lista ľ cuya codificación reducida por longitud es Ľ. Por ejemplo,
¹ 
Ó 
 ´ ¸¾¹ ¸¿¹ ¸
¸¿¹ ℄¸Äµº
Ä ¸ ¸ ¸ ¸ ¸ ¸ 
¸ ¸ ¸ ℄
Solución: La definición de 
Ó 
 es

Ó 
 ´ ℄¸ ℄µº

Ó 
 ´ ½¹ Ľ℄¸ ľ℄µ ¹
¸

Ó 
 ´Ä½¸Ä¾µº

Ó 
 ´ ƹ Ľ℄¸ ľ℄µ ¹
± Æ ½¸
¸
ƽ × Æ ¹ ½¸

Ó 
 ´ ƽ¹ Ľ℄¸Ä¾µº

Ó 
 ´ Ľ℄¸ ľ℄µ ¹
± × Ø Ñ 
Ó

Ó 
 ´Ä½¸Ä¾µº
72 Capítulo 4. Retroceso, corte y negación
4.24. Codificación reducida directa
Ejercicio 4.26 Definir la relación 
Ó 
 Ö 
Ø ´·Ä½¸¹Ä¾µ que se verifica si ľ es la
codificación reducida de Ľ (es decir, las sucesiones de un mismo elemento de Ľ se codifican
por términos de la forma ƹ donde Æ es la longitud de la sucesión cuando Æ es mayor que 1 y
por cuando Æ es igual a 1), pero en su definición no se crean listas de elementos repetidos como
en la definición de 
Ó 
 Ö Ù
 . Por ejemplo,
¹ 
Ó 
 Ö 
Ø ´ ¸ ¸ ¸ ¸ ¸ ¸
¸ ¸ ¸ ℄¸Äµº
Ä ¸ ¾¹ ¸ ¿¹ ¸ 
¸ ¿¹ ℄
Solución: La definición de 
Ó 
 Ö 
Ø es

Ó 
 Ö 
Ø ´ ℄¸ ℄µº

Ó 
 Ö 
Ø ´ Ľ℄¸ Ì Ä¾℄µ ¹

Ù ÒØ Ý Ö ×ØÓ´ ¸ Ľ℄¸Æ¸Ä¿µ¸
Ø ÖÑ ÒӴƸ ¸Ìµ¸

Ó 
 Ö 
Ø ´Ä¿¸Ä¾µº
La relación 
Ù ÒØ Ý Ö ×ØÓ´· ¸·Ä½¸¹Æ¸¹Ä¾µ se verifica si Æ es el número de veces
que aparece en la cabeza de la lista Ľ y ľ es el resto de la lista Ľ cuando se le quita
la sucesión de elementos de su cabeza. Por ejemplo,
¹ 
Ù ÒØ Ý Ö ×ØÓ´ ¸ ¸ ¸ ¸ ¸ ¸
¸ ¸ ¸ ℄¸Æ¸Äµº
Æ ¾
Ä ¸ ¸ ¸ 
¸ ¸ ¸ ℄
La definición de 
Ù ÒØ Ý Ö ×ØÓ es

Ù ÒØ Ý Ö ×ØÓ´ ¸ Ľ℄¸Æ¸Ä¾µ ¹

Ù ÒØ Ý Ö ×ØÓ´ ¸Ä½¸Å¸Ä¾µ¸
Æ × Å·½º

Ù ÒØ Ý Ö ×ØÓ´ ¸ Ä℄¸¼¸ Ä℄µ ¹
º

Ù ÒØ Ý Ö ×ØÓ´ ¸ ℄¸¼¸ ℄µº
La definición anterior puede simplificarse con cortes:

Ù ÒØ Ý Ö ×ØÓ ½´ ¸ Ľ℄¸Æ¸Ä¾µ ¹
¸

Ù ÒØ Ý Ö ×ØÓ ½´ ¸Ä½¸Å¸Ä¾µ¸
Æ × Å·½º

Ù ÒØ Ý Ö ×ØÓ ½´ ¸Ä¸¼¸Äµº
4.25. Cota superior de una lista de números 73
La relación Ø ÖÑ ÒÓ´·Æ¸· ¸¹Ìµ se verifica si Ì es el término correspondiente al nú-
mero Æ y al elemento (es decir, Ì es si Æ es 1 y es ƹ en otro caso). Por ejemplo,
¹ Ø ÖÑ ÒÓ´½¸ ¸Ìµº
Ì
¹ Ø ÖÑ ÒÓ´¾¸ ¸Ìµº
Ì ¾¹
La definición de Ø ÖÑ ÒÓ es
Ø ÖÑ ÒÓ´½¸ ¸ µº
Ø ÖÑ ÒӴƸ ¸Æ¹ µ ¹
Æ ½º
La definición anterior puede simplificarse con cortes:
Ø ÖÑ ÒÓ ½´½¸ ¸ µ ¹ º
Ø ÖÑ ÒÓ ½´Æ¸ ¸Æ¹ µº ± ¹ Æ ½º
4.25. Cota superior de una lista de números
Ejercicio 4.27 Definir la relación 
ÓØ ×ÙÔ Ö ÓÖ´·Ä¸·Æµ que se verifique si Æ es una cota
superior de Ä (es decir, todos los elementos de Ä son menores o iguales que Æ). Por ejemplo,
¹ 
ÓØ ×ÙÔ Ö ÓÖ´ ½¸ ¸¿℄¸ µº
×
¹ 
ÓØ ×ÙÔ Ö ÓÖ´ ½¸ ¸¿℄¸ µº
×
¹ 
ÓØ ×ÙÔ Ö ÓÖ´ ½¸ ¸¿℄¸ µº
ÆÓ
Dar dos definiciones, una recursiva y la otra no recursiva.
Solución: La definición recursiva de 
ÓØ ×ÙÔ Ö ÓÖ es

ÓØ ×ÙÔ Ö ÓÖ ½´ ℄¸ µº

ÓØ ×ÙÔ Ö ÓÖ ½´ Ä℄¸Æµ ¹
Ƹ

ÓØ ×ÙÔ Ö ÓÖ ½´Ä¸Æµº
La definición no recursiva de 
ÓØ ×ÙÔ Ö ÓÖ es
74 Capítulo 4. Retroceso, corte y negación

ÓØ ×ÙÔ Ö ÓÖ ¾´Ä¸Æµ ¹
· ´Ñ Ñ Ö´ ¸Äµ¸ Ƶº
Mediante el siguiente ejemplo se compara la eficiencia de las dos definiciones
¹ ÒÙÑÐ ×Ø´½¸½¼¼¼¼¸ ĵ¸ Ø Ñ ´
ÓØ ×ÙÔ Ö ÓÖ ½´ ĸ½¼¼¼¼µµº
± ¾¼¸¼¼½ Ò Ö Ò
 ׸ ¼º¼¼ ÈÍ Ò ¼º¼½ × 
ÓÒ × ´¼± È͸ ÁÒ Ò Ø Ä Ô×µ
¹ ÒÙÑÐ ×Ø´½¸½¼¼¼¼¸ ĵ¸ Ø Ñ ´
ÓØ ×ÙÔ Ö ÓÖ ¾´ ĸ½¼¼¼¼µµº
± ¿¼¸¼¼¾ Ò Ö Ò
 ׸ ¼º¼½ ÈÍ Ò ¼º¼½ × 
ÓÒ × ´ ¿± È͸ ¿¼¼¼¾¼¼ Ä Ô×µ
¹ ÒÙÑÐ ×Ø´½¸½¼¼¼¼¼¸ ĵ¸ Ø Ñ ´
ÓØ ×ÙÔ Ö ÓÖ ½´ ĸ½¼¼¼¼¼µµº
± ¾¼¼¸¼¼½ Ò Ö Ò
 ׸ ¼º¼ ÈÍ Ò ¼º¼ × 
ÓÒ × ´ ± È͸ ¾ ½ Ä Ô×µ
¹ ÒÙÑÐ ×Ø´½¸½¼¼¼¼¼¸ ĵ¸ Ø Ñ ´
ÓØ ×ÙÔ Ö ÓÖ ¾´ ĸ½¼¼¼¼¼µµº
± ¿¼¼¸¼¼¾ Ò Ö Ò
 ׸ ¼º¼ ÈÍ Ò ¼º¼ × 
ÓÒ × ´½¼ ± È͸ ¿ ¼¼¾ Ä Ô×µ
4.26. Dientes de sierra
Ejercicio 4.28 Definir la relación ÒØ ´·Ä¸¹Ä½¸¹ ¸¹Ä¾µ que se verifique si Ä se compone
de una lista Ľ de números estrictamente creciente hasta un cierto número que llamaremos
cima, de la cima y de una lista ľ de números estrictamente decreciente. Las listas tiene Ľ y ľ
tienen que ser no vacías y la cima es el mayor elemento de Ä. Por ejemplo,
¹ ÒØ ´ ½¸¾¸ ¸ ¸¿¸½℄¸Ä½¸ ¸Ä¾µº
Ľ ½¸ ¾℄
ľ ¸ ¿¸ ½℄
ÆÓ
¹ ÒØ ´ ½¸¾¸ ℄¸Ä½¸ ¸Ä¾µº
ÆÓ
Las listas que poseen esta forma de descomposición se llaman dientes.
Solución: La definición de ÒØ es
ÒØ ´Ä¸ ½ Ľ℄¸ ¸ ¾ ľ℄µ ¹
ÔÔ Ò ´ ½ Ľ℄¸ ¸ ¾ ľ℄¸Äµ¸

Ö 
 ÒØ ´ ½ Ľ℄µ¸
Ð ×Ø´ ½ Ľ℄¸ µ¸
¸

Ö 
 ÒØ ´ ¸ ¾ ľ℄µº
La relación 
Ö 
 ÒØ ´·Äµ se verifica si la lista de números Ä es estrictamente creciente.
4.26. Dientes de sierra 75

Ö 
 ÒØ ´ ℄µº

Ö 
 ÒØ ´ ¸ Ä℄µ ¹
¸

Ö 
 ÒØ ´ Ä℄µº
La relación 
Ö 
 ÒØ ´·Äµ se verifica si la lista de números Ä es estrictamente decre-
ciente.

Ö 
 ÒØ ´ ℄µº

Ö 
 ÒØ ´ ¸ Ä℄µ ¹
¸

Ö 
 ÒØ ´ Ä℄µº
Ejercicio 4.29 Una sierra es una lista numérica compuesta por la yuxtaposición de dientes.
Nótese 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.
Definir la relación ÒØ × × ÖÖ ´·Ä½¸ ľµ que se verifique si Ľ es una sierra y
ľ es la lista de los dientes de Ľ. Por ejemplo,
¹ ÒØ × × ÖÖ ´ ½¸¾¸½¸¿¸½℄¸Äµº
Ä ½¸ ¾¸ ½℄¸ ½¸ ¿¸ ½℄℄
ÆÓ
¹ ÒØ × × ÖÖ ´ ½¸¾¸½¸½¸¿¸½℄¸Äµº
ÆÓ
Solución: La definición de ÒØ × × ÖÖ es
ÒØ × × ÖÖ ´Ä¸ Ä℄µ ¹
ÒØ ´Ä¸ ¸ ¸ µ¸ º
ÒØ × × ÖÖ ´Ä¸ Ľ Ê℄µ ¹
ÔÔ Ò ´Ä½¸Ä¾¸Äµ¸
ÒØ ´Ä½¸ ¸ ¸ µ¸
Ð ×Ø´Ä½¸ µ¸
ÒØ × × ÖÖ ´ ľ℄¸Êµº
El corte aumenta la eficiencia como se aprecia en el siguiente ejemplo con la definición
con corte
¹ ÒÙÑÐ ×Ø´½¸½¼¼¸ Ľµ¸ ÔÔ Ò ´ Ľ¸ ½ Ľ℄¸ ľµ¸ Ø Ñ ´ ÒØ × × ÖÖ ´ ľ¸Äµµº
± ½¸ Ò Ö Ò
 ׸ ¼º¿ ÈÍ Ò ¼º¿ × 
ÓÒ × ´ ± È͸ ½ ½ ¿¼¼ Ä Ô×µ
ÆÓ
76 Capítulo 4. Retroceso, corte y negación
y el mismo ejemplo con la definición sin el corte
¹ ÒÙÑÐ ×Ø´½¸½¼¼¸ Ľµ¸ ÔÔ Ò ´ Ľ¸ ½ Ľ℄¸ ľµ¸ Ø Ñ ´ ÒØ × × ÖÖ ´ ľ¸Äµµº
± ¿¸½ ¸¾ ¼ Ò Ö Ò
 ׸ ¼º ¾ ÈÍ Ò ¼º × 
ÓÒ × ´ ± È͸ ¿ ¾¼ Ä Ô×µ
ÆÓ
Capítulo 5
Programación lógica de segundo orden
5.1. Determinación de un número por su factorial
Ejercicio 5.1 Definir la relación 
ØÓÖ Ð ÒÚ Ö×Ó´· ¸¹Æµ que se verifique si es el facto-
rial de Æ. Por ejemplo,
¹ 
ØÓÖ Ð ÒÚ Ö×Ó´½¾¼¸Æµº
Æ
ÆÓ
¹ 
ØÓÖ Ð ÒÚ Ö×Ó´ ¼¸Æµº
ÆÓ
Solución: Presentamos tres definiciones y comparamos su eficicencia.
La primera definición usa un acumulador para almacenar los candidatos de la so-
lución.

ØÓÖ Ð ÒÚ Ö×Ó ½´ ¸Æµ ¹

ØÓÖ Ð ÒÚ Ö×Ó ½ ÙÜ´ ¸½¸Æµº
La relación 
ØÓÖ Ð ÒÚ Ö×Ó ½ ÙÜ´· ¸· ¸¹Æµ se verifica si Æ es el menor número
mayor o igual que cuyo factorial es .

ØÓÖ Ð ÒÚ Ö×Ó ½ ÙÜ´ ¸ ¸ µ ¹

ØÓÖ Ð´ ¸ µº

ØÓÖ Ð ÒÚ Ö×Ó ½ ÙÜ´ ¸ ¸Æµ ¹

ØÓÖ Ð´ ¸Æ½µ¸
ƽ ¸
½ × · ½¸

ØÓÖ Ð ÒÚ Ö×Ó ½ ÙÜ´ ¸ ½¸Æµº
77
78 Capítulo 5. Programación lógica de segundo orden
La relación 
ØÓÖ Ð´·Æ¸¹ µ se verifica si es el factorial de Æ.

ØÓÖ Ð´½¸½µº

ØÓÖ Ð´Æ¸ µ ¹
Æ ½¸
ƽ × Æ¹½¸

ØÓÖ Ð´Æ½¸ ½µ¸
× ½ ¶ ƺ
La segunda definición se diferencia de la anterior en que almacena en memoria los
factoriales de los candidatos considerados.

ØÓÖ Ð ÒÚ Ö×Ó ¾´ ¸Æµ ¹

ØÓÖ Ð ÒÚ Ö×Ó ¾ ÙÜ´ ¸½¸Æµº
La relación 
ØÓÖ Ð ÒÚ Ö×Ó ¾ ÙÜ´· ¸· ¸¹Æµ se verifica si Æ es el menor número
mayor o igual que cuyo factorial (con memoria) es .

ØÓÖ Ð ÒÚ Ö×Ó ¾ ÙÜ´ ¸ ¸ µ ¹

ØÓÖ Ð 
ÓÒ Ñ ÑÓÖ ´ ¸ µº

ØÓÖ Ð ÒÚ Ö×Ó ¾ ÙÜ´ ¸ ¸Æµ ¹

ØÓÖ Ð 
ÓÒ Ñ ÑÓÖ ´ ¸Æ½µ¸
ƽ ¸
½ × · ½¸

ØÓÖ Ð ÒÚ Ö×Ó ¾ ÙÜ´ ¸ ½¸Æµº
La relación 
ØÓÖ Ð 
ÓÒ Ñ ÑÓÖ ´·Æ¸¹ µ se verifica si es el factorial de Æ. Además
almacena en la base de datos internas los factoriales calculados.
¹ ÝÒ Ñ 
 
ØÓÖ Ð 
ÓÒ Ñ ÑÓÖ »¾º

ØÓÖ Ð 
ÓÒ Ñ ÑÓÖ ´½¸½µº

ØÓÖ Ð 
ÓÒ Ñ ÑÓÖ ´Æ¸ µ ¹
Æ ½¸
ƽ × Æ¹½¸

ØÓÖ Ð 
ÓÒ Ñ ÑÓÖ ´Æ½¸ ½µ¸
× ½ ¶ Ƹ
×× ÖØ ´ 
ØÓÖ Ð 
ÓÒ Ñ ÑÓÖ ´Æ¸ µ ¹ µº
En la tercera definición se utiliza dos acumuladores para almacenar el candidato y
el factorial del candidato anterior.
5.2. Árbol de resolución y definiciones equivalentes 79

ØÓÖ Ð ÒÚ Ö×Ó ¿´ ¸Æµ ¹

ØÓÖ Ð ÒÚ Ö×Ó ÙÜ ¿´ ¸½¸½¸Æµº
La relación 
ØÓÖ Ð ÒÚ Ö×Ó ÙÜ ¿´· ¸· ¸· ¸¹Æµ se verifica si X = A ∗ (A + 1) ∗
· · · ∗ N (de forma que si A = 1 entonces X = N!).

ØÓÖ Ð ÒÚ Ö×Ó ÙÜ ¿´ ¸ ¸ ¸ µ ¹
¶ º

ØÓÖ Ð ÒÚ Ö×Ó ÙÜ ¿´ ¸ ¸ ¸Æµ ¹
½ × ¶ ¸
½ ¸ ¸
½ × · ½¸

ØÓÖ Ð ÒÚ Ö×Ó ÙÜ ¿´ ¸ ½¸ ½¸Æµº
En los siguientes ejemplos se compara la eficiencia.
¹ 
ØÓÖ Ð´¾ ¼¸ µ¸ Ø Ñ ´ 
ØÓÖ Ð ÒÚ Ö×Ó ½´ ¸ Ƶµº
± ¾ ¸ ¼½ Ò Ö Ò
 ׸ ¼º¾ ÈÍ Ò ¼º¿¼ × 
ÓÒ × ´ ± È͸ ½¼ Ä Ô×µ
¹ 
ØÓÖ Ð´¾ ¼¸ µ¸ Ø Ñ ´ 
ØÓÖ Ð ÒÚ Ö×Ó ¾´ ¸ Ƶµº
± ¿¸ Ò Ö Ò
 ׸ ¼º¼¼ ÈÍ Ò ¼º¼¼ × 
ÓÒ × ´¼± È͸ ÁÒ Ò Ø Ä Ô×µ
¹ 
ØÓÖ Ð´¾ ¼¸ µ¸ Ø Ñ ´ 
ØÓÖ Ð ÒÚ Ö×Ó ¿´ ¸ Ƶµº
± ½¸¾ Ò Ö Ò
 ׸ ¼º¼¼ ÈÍ Ò ¼º¼½ × 
ÓÒ × ´¼± È͸ ÁÒ Ò Ø Ä Ô×µ
¹ 
ØÓÖ Ð´½¼¼¼¸ µ¸ Ø Ñ ´ 
ØÓÖ Ð ÒÚ Ö×Ó ½´ ¸ Ƶµº
± ¿¾½¸ ¾¾ Ò Ö Ò
 ׸ ¼º ÈÍ Ò ¼º × 
ÓÒ × ´ ± È͸ ¿ Ä Ô×µ
ÊÊÇÊ ÇÙØ Ó ÐÓ
 Ð ×Ø 
¹ 
ØÓÖ Ð´½¼¼¼¸ µ¸ Ø Ñ ´ 
ØÓÖ Ð ÒÚ Ö×Ó ¾´ ¸ Ƶµº
± ½¿¸ Ò Ö Ò
 ׸ ¼º¼ ÈÍ Ò ¼º¼ × 
ÓÒ × ´ ± È͸ ½ ½ Ä Ô×µ
¹ 
ØÓÖ Ð´½¼¼¼¸ µ¸ Ø Ñ ´ 
ØÓÖ Ð ÒÚ Ö×Ó ¿´ ¸ Ƶµº
± ¸ Ò Ö Ò
 ׸ ¼º¼¿ ÈÍ Ò ¼º¼¿ × 
ÓÒ × ´½¼ ± È͸ ½ ¼¼ Ä Ô×µ
5.2. Árbol de resolución y definiciones equivalentes
Ejercicio 5.2 Se piden los siguientes apartados:
80 Capítulo 5. Programación lógica de segundo orden
1. Dibujar el árbol de resolución correspondiente al programa
Ô´ ℄¸ ℄µº
Ô´ ℄¸ ℄µ ¹
¸ ¸
Ô´ ¸ µº
Ô´ ℄¸ µ ¹
Ô´ ¸ µº
y al objetivo
¹ Ô´ ¸½¸ ℄¸ µº
2. Explicar la relación que hay entre Ľ y ľ cuando se verifica ԴĽ¸Ä¾µ.
3. Dar una definición no recursiva del predicado ԴĽ¸Ä¾µ.
Solución:
1. El árbol de resolución está en la figura 5.1 (página 81).
2. la relación ԴĽ¸Ä¾µ se verifica si ľ es la lista de los elementos de Ľ que son
mayores que 4.
3. Una definición no recursiva de Ô es
Ô½´Ä½¸Ä¾µ ¹
Ò Ðд ¸´Ñ Ñ Ö´ ¸Ä½µ¸ µ¸Ä¾µº
5.3. Nodos de una generación en una lista de árboles bi-
narios
Ejercicio 5.3 Un árbol binario es vacío o consta de tres partes: la raíz (que debe de ser un número
positivo), el subárbol izquierdo (que debe ser un árbol binario) y el subárbol derecho (que debe ser
un árbol binario). Usaremos la siguiente representación
Ò Ð representa el árbol vacío
Ø´Á¸Ê¸ µ representa el árbol de la raíz Ê, subárbol izquierdo Á y subárbol derecho .
Por ejemplo, Ø´Ø´Ò Ð¸¾¸Ò е¸½¸Ø´Ø´Ò и ¸Ò е¸¿¸Ò еµ representa el árbol
5.3. Nodos de una generación en una lista de árboles binarios 81
5 > 4, !,
p([1,6],B1)
!,
p([1,6],B1)
2 {X1/5,
A1/[1,6],
B0/[5|B1]}
2 {X3/1,
A3/[6],
B1/[1|B3]}
3 {X3/1,
A3/[6],
B3/B1}
p([6],B1)1 > 4, !,
p([6],B3)
2 {X4/6,
A4/[],
B1/[6|B4]}
6 > 4, !,
p([],B4)
!,
p([],B4)
p([5,1,6],B0)
3
Fallo
p([],B4)
1 {B4/[]}
B = B0 = [5|B1] = [5,6|B4] = [5,6]
Figura 5.1: Árbol de resolución
82 Capítulo 5. Programación lógica de segundo orden
½
»
¾ ¿
»
Definir la relación Ò Ö 
 Ò´·Æ¸·Ä½¸¹Ä¾µ que se verifique si ľ es la lista de nodos de la
generación Æ de la lista de árboles Ľ. Por ejemplo,
¹ Ò Ö 
 Ò´¼¸ Ø´Ø´Ò Ð¸¾¸Ò е¸¿¸Ò е¸Ø´Ò и ¸Ø´Ò и ¸Ò еµ℄¸Äµº
Ä ¿¸ ℄
¹ Ò Ö 
 Ò´½¸ Ø´Ø´Ò Ð¸¾¸Ò е¸¿¸Ò е¸Ø´Ò и ¸Ø´Ò и ¸Ò еµ℄¸Äµº
Ä ¾¸ ℄
¹ Ò Ö 
 Ò´¾¸ Ø´Ø´Ò Ð¸¾¸Ò е¸¿¸Ò е¸Ø´Ò и ¸Ø´Ò и ¸Ò еµ℄¸Äµº
Ä ℄
Solución: La definición de Ò Ö 
 Ò es
Ò Ö 
 Ò´¼¸Ä¸ µ ¹
Ò ÐÐ´Ê¸Ñ Ñ Ö´Ø´ ¸Ê¸ µ¸Äµ¸ µº
Ò Ö 
 ҴƸĸ µ ¹
Æ ¼¸
Ð Ñ Ò Ö 
 ״ĸĽµ¸
ƽ × Æ¹½¸
Ò Ö 
 Ҵƽ¸Ä½¸ µº
donde Ð Ñ Ò Ö 
 ×´·Ä½¸¹Ä¾µ se verifica si ľ es la lista de los árboles obtenidos de
la lista de árboles Ľ eliminando sus raices. Por ejemplo,
¹ Ð Ñ Ò Ö 
 ×´ Ø´Ø´Ò Ð¸¾¸Ò е¸¿¸Ò е¸Ø´Ò и ¸Ø´Ò и ¸Ò еµ℄¸Äµº
Ä Ø´Ò Ð¸ ¾¸ Ò Ðµ¸ Ò Ð¸ Ò Ð¸ Ø´Ò Ð¸ ¸ Ò Ðµ℄
La definición de Ð Ñ Ò Ö 
 × es
Ð Ñ Ò Ö 
 ×´ ℄¸ ℄µº
Ð Ñ Ò Ö 
 ×´ Ò Ð Ä½℄¸Ä¾µ ¹
Ð Ñ Ò Ö 
 ״Ľ¸Ä¾µº
Ð Ñ Ò Ö 
 ×´ Ø´Á¸ ¸ µ Ľ℄¸ Á¸ ľ℄µ ¹
Ð Ñ Ò Ö 
 ״Ľ¸Ä¾µº
5.4. Lista de elementos únicos 83
5.4. Lista de elementos únicos
Ejercicio 5.4 Definir la relación Ò 
Ó×´·Ä½¸¹Ä¾µ que se verifique si ľ es la lista de los ele-
mentos que ocurren solamente una vez en la lista Ľ. Por ejemplo,
¹ Ò 
Ó×´ ¾¸ ¸¿¸¾℄¸Äµº
Ä ¸ ¿℄
¹ Ò 
Ó×´ ¾¸ ¸ ¸¾℄¸Äµº
Ä ℄
Solución: La definición de Ò 
Ó× es
Ò 
Ó״Ľ¸Ä¾µ ¹
Ò Ðд ¸ × Ò 
Ó´ ¸Ä½µ¸Ä¾µº
donde la relación × Ò 
Ó´ ¸·Äµ se verifica si es un elemento que ocurre solamente
una vez en la lista Ä. Por ejemplo,
¹ × Ò 
Ó´ ¸ ¾¸ ¸¿¸¾℄µº
¿
ÆÓ
× Ò 
Ó´ ¸Äµ ¹
× Ð 
Ø´ ¸Ä¸Êµ¸
ÒÓØ´Ñ Ñ Ö
 ´ ¸Êµµº
5.5. Elementos más frecuentes de una lista
Ejercicio 5.5 Definir el predicado ÔÓÔÙÐ Ö ×´Ä½¸Ä¾µ que se verifique si ľ es la lista de los
elementos de Ľ que aparecen el mayor número de veces. Por ejemplo,
¹ ÔÓÔÙÐ Ö ×´ ÖÓ× ¸ Ù Ò¸ Ú ¸Ñ ÒÙ¸ÖÓ× ¸ÒÙÖ ¸ Ú ℄¸Äµº
Ä Ú ¸ÖÓ× ℄
Solución: La definición de ÔÓÔÙÐ Ö × es
ÔÓÔÙÐ Ö ×´Ä½¸Ä¾µ ¹
× ØÓ ´ ¸
´´Ñ Ñ Ö´ ¸Ä½µ¸

Ù ÒØ ´ ¸Ä½¸Æ½µ¸
84 Capítulo 5. Programación lógica de segundo orden
ÒÓØ´´Ñ Ñ Ö´ ¸Ä½µ¸

Ù ÒØ ´ ¸Ä½¸Æ¾µ¸
ƽ ƾµµµµ¸
ľµº
La relación 
Ù ÒØ ´· ¸·Ä¸¹Æµ se verifica si Æ es el número de veces que aparece el ele-
mento en la lista Ä. Por ejemplo,
¹ 
Ù ÒØ ´ ¸ Ö¸ ¸ ¸Ñ¸Ö¸Ò¸ ℄¸Æµº
Æ ¾
La definición de 
Ù ÒØ es

Ù ÒØ ´ ¸ ℄¸¼µº

Ù ÒØ ´ ¸ Ä℄¸Æµ ¹
¸ ¸

Ù ÒØ ´ ¸Ä¸Åµ¸
Æ × Å·½º

Ù ÒØ ´ ¸ Ä℄¸Æµ ¹
± ¸

Ù ÒØ ´ ¸Ä¸Æµº
5.6. Problema 3n + 1
Ejercicio 5.6 Consideremos la función siguiente definida sobre los números naturales:
f (x) =
3x + 1, si x es impar;
x/2, si x es par
se pide:
1. Definir la relación ×Ù
 × Ò´· ¸ ĵ que se verifique si Ä es la lista de los elementos X,
f (X), f (f (X)), . . . , f n(X) tal que f n(X) = 1. Por ejemplo,
¹ ×Ù
 × Ò´¿¸Äµº
Ä ¿¸ ½¼¸ ¸ ½ ¸ ¸ ¸ ¾¸ ½℄
Ä se llama la sucesión generada por Æ.
2. Definir la relación ÐÓÒ ØÙ ×´· ¸ ĵ que se verifica si Ä la lista de pares ¹Æ donde
es un número de 1 a y Æ es la longitud de sucesión generada por . Por ejemplo,
5.6. Problema 3n + 1 85
¹ ÐÓÒ ØÙ ×´ ¸Äµº
Ä ½¹½¸ ¾¹¾¸ ¿¹ ¸ ¹¿¸ ¹ ℄
3. Definir la relación ÐÓÒ ØÙ Ñ Ü´· ¸ ȵ que se verifica si È es un par de la forma ¹Æ
donde es un número entre 1 y tal que la longitud de la sucesión generada por es la
más larga de las sucesiones generadas por 1,2,. . . , y Æ es la longitud de dicha sucesión.
Por ejemplo,
¹ ÐÓÒ ØÙ Ñ Ü´½¼¸Äµº
Ä ¹¾¼
4. Definir Ñ ÒÓÖ ÕÙ Ò Ö Ñ ÝÓÖ´·Æ¸¹Åµ que se verifique si Å es el menor número na-
tural tal que la longitud de la sucesión generada por Å es mayor que Æ. Por ejemplo,
¹ Ñ ÒÓÖ ÕÙ Ò Ö Ñ ÝÓÖ´½¼¼¸Æµº
Æ ¾
Solución: La relación ´· ¸¹ µ se verifica si ´ µ.
´ ¸ µ ¹
ÑÓ ¾ ¼¸ ¸
× »¾º
´ ¸ µ ¹
± ÑÓ ¾ » ¼¸
× ¿¶ ·½º
Solución del apartado 1: La definición de ×Ù
 × Ò es
×Ù
 × Ò´½¸ ½℄µ ¹ º
×Ù
 × Ò´ ¸ Ä℄µ ¹
± » ½¸
´ ¸ µ¸
×Ù
 × Ò´ ¸Äµº
Solución del apartado 2: Presentamos dos definiciones de ÐÓÒ ØÙ ×.
La primera definición de ÐÓÒ ØÙ × es recursiva.
ÐÓÒ ØÙ ×´ ¸Äµ ¹
ÐÓÒ ØÙ × ÙÜ´ ¸Ä½µ¸
Ö Ú Ö× ´Ä½¸Äµº
ÐÓÒ ØÙ × ÙÜ´½¸ ½¹Æ℄µ ¹
¸
×Ù
 × Ò´½¸Äµ¸
86 Capítulo 5. Programación lógica de segundo orden
Ð Ò Ø ´Ä¸Æµº
ÐÓÒ ØÙ × ÙÜ´ ¸ ¹Æ Ä℄µ ¹
± ½¸
×Ù
 × Ò´ ¸Ä½µ¸
Ð Ò Ø ´Ä½¸Æµ¸
× ¹½¸
ÐÓÒ ØÙ × ÙÜ´ ¸Äµº
La segunda definición de ÐÓÒ ØÙ ×, usando Ò ÐÐ, es
ÐÓÒ ØÙ × ¾´ ¸Äµ ¹
Ò Ðд ¹Æ¸´ ØÛ Ò´½¸ ¸ µ¸×Ù
 × Ò´ ¸Ëµ¸Ð Ò Ø ´Ë¸Æµµ¸Äµº
Solución del apartado 3: La definición de ÐÓÒ ØÙ Ñ Ü es
ÐÓÒ ØÙ Ñ Ü´ ¸ ¹Æµ ¹
ÐÓÒ ØÙ ×´ ¸Äµ¸
Ñ Ñ Ö´ ¹Æ¸Äµ¸
· ´Ñ Ñ Ö´ ¹Å¸Äµ¸ ŠƵº
Solución del apartado 4: La definición de Ñ ÒÓÖ ÕÙ Ò Ö Ñ ÝÓÖ es
Ñ ÒÓÖ ÕÙ Ò Ö Ñ ÝÓִƸŵ ¹
Ñ ÒÓÖ ÕÙ Ò Ö Ñ ÝÓÖ ÙܴƸ½¸Åµº
Ñ ÒÓÖ ÕÙ Ò Ö Ñ ÝÓÖ ÙܴƸŸŵ ¹
×Ù
 × Ò´Å¸Äµ¸
Ð Ò Ø ´Ä¸ µ¸
Ƹ º
Ñ ÒÓÖ ÕÙ Ò Ö Ñ ÝÓÖ ÙܴƸ ¸Åµ ¹
× ·½¸
Ñ ÒÓÖ ÕÙ Ò Ö Ñ ÝÓÖ ÙܴƸ ¸Åµº
5.7. Números perfectos
En los ejercicio de esta sección estudiamos los números perfectos (es decir, iguales
a la suma de sus divisores propios) y conceptos relacionados.
Ejercicio 5.7 Definir la relación Ú ×ÓÖ × ÔÖÓÔ Ó×´·Æ¸¹Äµ que se verifique si Ä es la lista
ordenada de los divisores propios del número Æ. Por ejemplo,
5.7. Números perfectos 87
¹ Ú ×ÓÖ × ÔÖÓÔ Ó×´ ¾¸Äµº
Ä ½¸ ¾¸ ¿¸ ¸ ¸ ½ ¸ ¾½℄
Solución: La definición de Ú ×ÓÖ × ÔÖÓÔ Ó× es
Ú ×ÓÖ × ÔÖÓÔ Ó״Ƹĵ ¹
ƽ × Æ ¹½¸
Ò Ðд ¸´ ØÛ Ò´½¸Æ½¸ µ¸ ¼ Æ ÑÓ µ¸Äµº
Ejercicio 5.8 Definir la relación ×ÙÑ Ú ×ÓÖ × ÔÖÓÔ Ó×´·Æ¸¹Ëµ que se verifique si Ë es la
suma de los divisores propios del número Æ. Por ejemplo,
¹ ×ÙÑ Ú ×ÓÖ × ÔÖÓÔ Ó×´ ¾¸Ëµº
Ë
¹ ×ÙÑ Ú ×ÓÖ × ÔÖÓÔ Ó×´½¸Ëµº
Ë ¼
Solución: La definición de ×ÙÑ Ú ×ÓÖ × ÔÖÓÔ Ó× es
×ÙÑ Ú ×ÓÖ × ÔÖÓÔ Ó״Ƹ˵ ¹
Ú ×ÓÖ × ÔÖÓÔ Ó״Ƹĵ¸
×ÙÑ Ð ×Ø ´Ä¸Ëµº
La relación ×ÙÑ Ð ×Ø ´·Ä¸¹Æµ se verifica si Æ es la suma de los elementos de la lista Ä.
×ÙÑ Ð ×Ø ´ ℄¸¼µº
×ÙÑ Ð ×Ø ´ Ä℄¸Ëµ ¹
×ÙÑ Ð ×Ø ´Ä¸Ë½µ¸
Ë × · ˽º
Ejercicio 5.9 Clasificamos los números 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 relación Ø ÔÓ´·Æ¸¹Ì) que se verifique si Ì es el tipo del número Æ. Por ejemplo,
¹ Ø ÔÓ´½¼¸Ìµº
Ì
¹ Ø ÔÓ´¾ ¸Ìµº
Ì
¹ Ø ÔÓ´½¾¸Ìµº
Ì
88 Capítulo 5. Programación lógica de segundo orden
Solución: La definición de Ø ÔÓ es
Ø ÔӴƸ̵ ¹
×ÙÑ Ú ×ÓÖ × ÔÖÓÔ Ó״Ƹ˵¸
Ø ÔÓ ÙܴƸ˸̵º
Ø ÔÓ ÙܴƸ˸ µ ¹ Æ Ë¸ º
Ø ÔÓ ÙܴƸƸ µ ¹ º
Ø ÔÓ ÙܴƸ˸
µº ± ¹ Æ Ëº
Ejercicio 5.10 Definir la relación 
Ð × 
 ´·Æ¸¹Äµ que se verifique si Ä es la lista de tipos
de los números comprendidos entre 1 y Æ. Por ejemplo,
¹ 
Ð × 
 ´¾¼¸Äµº
Ä ¸ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ¸ 
¸ ¸ ¸ ¸ ¸ ¸ 
¸ ¸ 
℄
Solución: La definición de 
Ð × 
 es

Ð × 
 ´Æ¸Äµ ¹
Ò Ðд̸´ ØÛ Ò´½¸Æ¸ µ¸Ø ÔÓ´ ¸Ìµµ¸Äµº
Ejercicio 5.11 Definir la relación ÔÖÓÑ Ó´·Æ¸¹ ¸¹ ¸¹ µ que se verifique si , y son las
cantidades de números naturales menores o iguales que Æ de tipo a, b y c, respectivamente. Por
ejemplo,
¹ ÔÖÓÑ Ó´¾¼¸ ¸ ¸ µº
½
½
¿
Solución: La definición de ÔÖÓÑ Ó es
ÔÖÓÑ Ó´Æ¸ ¸ ¸ µ ¹

Ð × 
 ´Æ¸Äµ¸
ÔÖÓÑ Ó Ùܴĸ ¸ ¸ µº
ÔÖÓÑ Ó ÙÜ´ ℄¸¼¸¼¸¼µº
ÔÖÓÑ Ó ÙÜ´ Ä℄¸ ½¸ ¸ µ ¹
ÔÖÓÑ Ó Ùܴĸ ¸ ¸ µ¸
½ × ·½º
ÔÖÓÑ Ó ÙÜ´ Ä℄¸ ¸ ½¸ µ ¹
ÔÖÓÑ Ó Ùܴĸ ¸ ¸ µ¸
5.8. Determinación de triángulos equiláteros 89
½ × ·½º
ÔÖÓÑ Ó ÙÜ´ 
 Ä℄¸ ¸ ¸ ½µ ¹
ÔÖÓÑ Ó Ùܴĸ ¸ ¸ µ¸
½ × ·½º
Ejercicio 5.12 Definir la relación Ñ ÒÓÖ´·Æ¸¹ µ que se verifique si es el menor número tal
que la cantidad de números naturales menores o iguales que de tipo a es Æ. Por ejemplo,
¹ Ñ ÒÓÖ´¾¼¸ µº
¾
Solución: La definición de Ñ ÒÓÖ es
Ñ ÒÓִƸ µ ¹
Ñ ÒÓÖ ÙܴƸƸ µº
Ñ ÒÓÖ ÙܴƸŸŵ ¹
ÔÖÓÑ Ó´Å¸Æ¸ ¸ µ¸ º
Ñ ÒÓÖ ÙܴƸŸ µ ¹
Ž × Å·½¸
Ñ ÒÓÖ ÙܴƸޏ µº
5.8. Determinación de triángulos equiláteros
Ejercicio 5.13 Un polígono se representa por su nombre y las longitudes de sus lados. Definir
la relación × ÕÙ Ð Ø ÖÓ´·Èµ que se verifica si el polígono È es equilátero (es decir, que todos
sus lados son iguales). Por ejemplo,
¹ × ÕÙ Ð Ø ÖÓ´ØÖ Ò ÙÐÓ´ ¸ ¸ µµº
×
¹ × ÕÙ Ð Ø ÖÓ´
Ù Ö Ð Ø ÖÓ´¿¸ ¸ ¸¿µµº
ÆÓ
Solución: La definición de × ÕÙ Ð Ø ÖÓ es
× ÕÙ Ð Ø ÖӴȵ ¹
È ºº Ä℄¸
ØÓ Ó× Ù Ð ×´Äµº
La relación ØÓ Ó× Ù Ð × está definida en la página 19.
90 Capítulo 5. Programación lógica de segundo orden
5.9. Operación binaria aplicada a listas
Ejercicio 5.14 Definir la relación ÓÔ Ö 
 Ò Ð ×Ø ×´·Ç¸·Ä½¸·Ä¾¸¹Ä¿µ que se verifica si Ä¿
es la lista obtenida aplicando la operación binaria Ç a los elementos de Ľ y ľ que ocupan la
misma posición. Por ejemplo,
¹ ÓÔ Ö 
 Ò Ð ×Ø ´·¸ ½¸¾¸¿℄¸ ¸ ¸ ℄¸Äµº
Ä ¸ ¸ ℄
¹ ÓÔ Ö 
 Ò Ð ×Ø ´¶¸ ½¸¾¸¿℄¸ ¸ ¸ ℄¸Äµº
Ä ¸ ½¼¸ ½ ℄
Nota: Se supone que Ľ y ľ tienen la misma longitud)
Solución: La definición de ÓÔ Ö 
 Ò Ð ×Ø es
ÓÔ Ö 
 Ò Ð ×Ø ´ ¸ ℄¸ ℄¸ ℄µº
ÓÔ Ö 
 Ò Ð ×Ø ´Ç¸ ½ Ľ℄¸ ¾ ľ℄¸ ¿ Ä¿℄µ ¹
ºº Ǹ ½¸ ¾℄¸
¿ × ¸
ÓÔ Ö 
 Ò Ð ×Ø ´Ç¸Ä½¸Ä¾¸Ä¿µº
5.10. Números en un término
Ejercicio 5.15 Definir la relación Ò Ñ ÖÓ×´·Ì¸¹Äµ que que se verifique si Ä es el conjunto de
todos los números que ocurren en el término cerrado Ì. Por ejemplo,
¹ Ò Ñ ÖÓ×´ ´ ¸ ´
¸ µ¸¾µ¸Äµº
Ä ¸ ¾℄
¹ Ò Ñ ÖÓ×´ ·¿· ¶´× Ò´¾µ·¿µ¸Äµº
Ä ¾¸ ¿℄
¹ Ò Ñ ÖÓ×´ · ¸Äµº
Ä ℄
Solución: La definición de Ò Ñ ÖÓ× es
Ò Ñ ÖÓ״̸ Ì℄µ ¹
ÒÙÑ Ö´Ìµ¸ º
Ò Ñ ÖÓ״̸ĵ ¹
± ÒÓØ´ÒÙÑ Ö´Ìµµ¸
Ì ºº Ľ℄¸
Ò Ñ ÖÓ× Ð ×Ø ´Ä½¸Äµº
5.11. Palabra sin vocales 91
La relación Ò Ñ ÖÓ× Ð ×Ø ´·Ä½¸¹Ä¾µ se verifica si ľ es el conjunto de números en
la lista de términos Ľ. Por ejemplo,
¹ Ò Ñ ÖÓ× Ð ×Ø ´ ·¿¸ ¶´× Ò´¾µ·¿µ℄¸Äµº
Ä ¾¸ ¿℄
La definición de Ò Ñ ÖÓ× Ð ×Ø es
Ò Ñ ÖÓ× Ð ×Ø ´ ℄¸ ℄µº
Ò Ñ ÖÓ× Ð ×Ø ´ Ì Ä½℄¸Ä¾µ ¹
Ò Ñ ÖÓ״̸Ŀµ¸
Ò Ñ ÖÓ× Ð ×Ø ´Ä½¸Ä µ¸
ÙÒ ÓÒ´Ä¿¸Ä ¸Ä¾µº
5.11. Palabra sin vocales
Ejercicio 5.16 Definir la relación Ð Ñ Ò ÚÓ
 Ð ×´·È½¸¹È¾µ que se verifique si Ⱦ es la
palabra que se obtiene al eliminar todas las vocales de la palabra Ƚ. Por ejemplo,
¹ Ð Ñ Ò ÚÓ
 Ð ×´× Ú ÐÐ ÒӸȵº
È ×ÚÐÐÒ
Solución: La definición de Ð Ñ Ò ÚÓ
 Ð × es
Ð Ñ Ò ÚÓ
 Р״Ƚ¸È¾µ ¹
Ò Ñ ´È½¸Ä½µ¸

 Ó× ÚÓ
 Р״ĵ¸
Ò ÐдƸ´Ñ Ñ Ö´Æ¸Ä½µ¸ÒÓØ´Ñ Ñ Ö´Æ¸Äµµµ¸Ä¾µ¸
Ò Ñ ´È¾¸Ä¾µº
La relación 
 Ó× ÚÓ
 Ð ×´ ĵ se verifica si Ä es la lista de los códigos ASCII de las
vocales.

 Ó× ÚÓ
 Р״ĵ ¹
Ò Ñ ´ Óٸĵº
5.12. Palabras maximales
Ejercicio 5.17 Definir la relación ÐÓÒ ØÙ ´·È¸¹Æµ que se verifique si Æ es la longitud de la
palabra È. Por ejemplo,
92 Capítulo 5. Programación lógica de segundo orden
¹ ÐÓÒ ØÙ ´ Ò ¸Æµº
Æ ¿
Solución: La definición de ÐÓÒ ØÙ es
ÐÓÒ ØÙ ´È¸Æµ ¹
Ò Ñ ´È¸Äµ¸
Ð Ò Ø ´Ä¸Æµº
Ejercicio 5.18 Definir la relación Ô Ð Ö Ñ Ü Ñ Ð´·Ä¸¹Èµ que se verifique si È es una pala-
bra maximal (es decir, de máxima longitud) de la lista de palabras Ä. Por ejemplo,
¹ Ô Ð Ö Ñ Ü Ñ Ð´ Ú ¸Ý¸ Ò ¸× ¸Ú Ò℄¸Èµº
È Ú
È Ò
È Ú Ò
ÆÓ
Solución: La definición de Ô Ð Ö Ñ Ü Ñ Ð es
Ô Ð Ö Ñ Ü Ñ Ð´Ä¸Èµ ¹
× Ð 
شȸĸʵ¸
ÐÓÒ ØÙ ´È¸Æµ¸
ÒÓØ´´Ñ Ñ Ö´È½¸Êµ¸ ÐÓÒ ØÙ ´È½¸Æ½µ¸ Æ Æ½µµº
Ejercicio 5.19 Definir la relación Ô Ð Ö × Ñ Ü Ñ Ð ×´·Ä½¸¹Ä¾µ que se verifique si ľ es la
lista de las palabras maximales de la lista de palabras Ľ. Por ejemplo,
¹ Ô Ð Ö × Ñ Ü Ñ Ð ×´ Ú ¸Ý¸ Ò ¸× ¸Ú Ò℄¸Äµº
Ä Ú ¸ Ò ¸ Ú Ò℄
Solución: La definición de Ô Ð Ö × Ñ Ü Ñ Ð × es
Ô Ð Ö × Ñ Ü Ñ Ð ×´Ä½¸Ä¾µ ¹
Ò ÐÐ´È¸Ô Ð Ö Ñ Ü Ñ Ð´Ä½¸Èµ¸Ä¾µº
5.13. Clausura transitiva de una relación
Ejercicio 5.20 La clausura transitiva de una relación binaria R es la menor relación 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 clau-
sura transitiva de la relación Ê. Por ejemplo, suponiendo que se han definido las relaciones Ô y Õ
por
5.14. Traducción de cifras a palabras 93
Ô´ ¸ µº
Ô´ ¸
µº
Õ´
¸ µº
Õ´ ¸ µº
se tiene
¹ 
Ð Ù×ÙÖ ØÖ Ò× Ø Ú ´Ô¸ ¸ µº


ÆÓ
¹ 
Ð Ù×ÙÖ ØÖ Ò× Ø Ú ´Õ¸ ¸ µº


ÆÓ
Solución: La definición de 
Ð Ù×ÙÖ ØÖ Ò× Ø Ú es

Ð Ù×ÙÖ ØÖ Ò× Ø Ú ´Ê¸ ¸ µ ¹
ÔÔÐݴʸ ¸ ℄µº

Ð Ù×ÙÖ ØÖ Ò× Ø Ú ´Ê¸ ¸ µ ¹
ÔÔÐݴʸ ¸ ℄µ¸

Ð Ù×ÙÖ ØÖ Ò× Ø Ú ´Ê¸ ¸ µº
5.14. Traducción de cifras a palabras
Ejercicio 5.21 Definir la relación ØÖ Ù

 Ò´·Ä½¸¹Ä¾µ que se verifique si ľ es la lista de
palabras correspondientes a los dígitos de la lista Ľ. Por ejemplo,
¹ ØÖ Ù

 Ò´ ½¸¿℄¸Äµº
Ä ÙÒÓ¸ ØÖ ×℄
(Indicación: Usar la relación auxiliar ÒÓÑ Ö ´ ¸Æµ que se verifica si Æ es el nombre del dígito
).
Solución: La definición de la relación auxiliar ÒÓÑ Ö es
94 Capítulo 5. Programación lógica de segundo orden
ÒÓÑ Ö ´¼¸
 ÖÓµº
ÒÓÑ Ö ´½¸ÙÒÓµº
ÒÓÑ Ö ´¾¸ Ó×µº
ÒÓÑ Ö ´¿¸ØÖ ×µº
ÒÓÑ Ö ´ ¸
Ù ØÖÓµº
ÒÓÑ Ö ´ ¸
 Ò

ÒÓÑ Ö ´ ¸× ×µº
ÒÓÑ Ö ´ ¸× Ø µº
ÒÓÑ Ö ´ ¸Ó
 
ÒÓÑ Ö ´ ¸ÒÙ Ú µº
Se presentan tres definiciones de ØÖ Ù

 Ò.
Primera solución: Una definición de ØÖ Ù

 ҴĽ¸Ä¾µ, por recursión en Ľ, es
ØÖ Ù

 Ò ½´ ℄¸ ℄µº
ØÖ Ù

 Ò ½´ Ľ℄¸ Æ Ä¾℄µ ¹
ÒÓÑ Ö ´ ¸Æµ¸
ØÖ Ù

 Ò ½´Ä½¸Ä¾µº
Segunda solución: Una definición de ØÖ Ù

 Ò usando Ò ÐÐ es
ØÖ Ù

 Ò ¾´Ä½¸Ä¾µ ¹
Ò ÐдƸ´Ñ Ñ Ö´ ¸Ä½µ¸ÒÓÑ Ö ´ ¸Æµµ¸Ä¾µº
Tercera solución: Una definición de ØÖ Ù

 Ò usando Ñ ÔÐ ×Ø es
ØÖ Ù

 Ò ¿´Ä½¸Ä¾µ ¹
Ñ ÔÐ ×Ø´ÒÓÑ Ö ¸Ä½¸Ä¾µº
5.15. Transformación de lista dependiente de la posición
Ejercicio 5.22 Definir la relación ØÖ Ò× ÓÖÑ ´·Ä½¸¹Ä¾µ que se verifique si ľ es la lista obte-
nida sumándole a cada elemento numérico de Ľ su posición en la lista. Por ejemplo,
¹ ØÖ Ò× ÓÖÑ ´ ½¸½¸½¸ ¸ ¸
¸½¸½¸½℄¸Äµº
Ä ¾¸ ¿¸ ¸ ¸ ¸ 
¸ ¸ ¸ ½¼℄
¹ ØÖ Ò× ÓÖÑ ´ ½¸¾¸ ¸ ¸¾¸ ¸¿¸½℄¸Äµº
Ä ¾¸ ¸ ¸ ¸ ¸ ¸ ½¼¸ ℄
Dar dos definiciones, una recursiva y otra no–recursiva.
5.15. Transformación de lista dependiente de la posición 95
Solución: La definición de recursiva de ØÖ Ò× ÓÖÑ es
ØÖ Ò× ÓÖÑ ´Ä½¸Ä¾µ ¹
ØÖ Ò× ÓÖÑ ÙܴĽ¸½¸Ä¾µº
donde ØÖ Ò× ÓÖÑ ÙÜ´·Ä½¸·Æ¸¹Ä¾µ se verifica si ľ es la lista obtenida añadiéndole a
cada elemento numérico de Ľ la suma de Æ y su posición en la lista. Por ejemplo,
ØÖ Ò× ÓÖÑ ÙÜ´ ℄¸ ¸ ℄µº
ØÖ Ò× ÓÖÑ ÙÜ´ Ľ℄¸Æ¸ ľ℄µ ¹
ÒÙÑ Ö´ µ¸ ¸
× ·Æ¸
ƽ × Æ·½¸
ØÖ Ò× ÓÖÑ ÙܴĽ¸Æ½¸Ä¾µº
ØÖ Ò× ÓÖÑ ÙÜ´ Ľ℄¸Æ¸ ľ℄µ ¹
± ÒÓØ´ÒÙÑ Ö´ µµ¸
ƽ × Æ·½¸
ØÖ Ò× ÓÖÑ ÙܴĽ¸Æ½¸Ä¾µº
La definición no recursiva de ØÖ Ò× ÓÖÑ es
ØÖ Ò× ÓÖÑ ¾´Ä½¸Ä¾µ ¹
Ð ×Ø ÔÓ× 
 ÓÒ ×´Ä½¸Äµ¸
Ñ ÔÐ ×Ø´×ÙÑ ¸Ä½¸Ä¸Ä¾µº
donde Ð ×Ø ÔÓ× 
 ÓÒ ×´·Ä½¸¹Ä¾µ se verifica si ľ es la lista de posiciones corres-
pondiente a la lista Ľ. Por ejemplo,
¹ Ð ×Ø ÔÓ× 
 ÓÒ ×´ ½¸½¸½¸ ¸ ¸
¸½¸½¸½℄¸Äµº
Ä ½¸ ¾¸ ¿¸ ¸ ¸ ¸ ¸ ¸ ℄
Ð ×Ø ÔÓ× 
 ÓÒ ×´Ä½¸Ä¾µ ¹
Ð Ò Ø ´Ä½¸Æµ¸
Ò Ðд ¸ ØÛ Ò´½¸Æ¸ µ¸Ä¾µº
y ×ÙÑ ´· ¸· ¸¹ µ se verifica si es la suma de y el número , cuando es un número
y es igual a , en caso contrario. Por ejemplo,
¹ ×ÙÑ ´¿¸¾¸ µº
¹ ×ÙÑ ´ ¸¾¸ µº
96 Capítulo 5. Programación lógica de segundo orden
×ÙÑ ´ ¸ ¸ µ ¹
ÒÙÑ Ö´ µ¸ ¸
× · º
×ÙÑ ´ ¸ ¸ µº
5.16. Aplanamiento de listas
Ejercicio 5.23 Definir la relación ÔÐ Ò ´·Ä½¸ ľµ que se verifique si ľ es la lista obtenida
reemplazando, recursivamente, cada lista de Ľ por sus elementos. Por ejemplo,
¹ ÔÐ Ò ´ ¸ ¸ 
℄℄¸ ℄¸ ℄℄¸Äµº
Ä ¸ ¸ 
¸ ¸ ℄
Solución: Para definir ÔÐ Ò ´ ¸ µ vamos a generalizar su dominio de forma que
si no es una lista, entonces es la lista cuyo único elemento es .
ÔÐ Ò ´ ¸ ℄µ ¹
· × Ð ×Ø´ µº
ÔÐ Ò ´ ℄¸ ℄µº
ÔÐ Ò ´ Ľ℄¸Ä¾µ ¹
ÔÐ Ò ´ ¸Ä¿µ¸
ÔÐ Ò ´Ä½¸Ä µ¸
ÔÔ Ò ´Ä¿¸Ä ¸Ä¾µº
Capítulo 6
Estilo y eficiencia en programación
lógica
6.1. Número de Hardy
En cierta ocasión, el matemático Ramanujan estaba en un hospital en Inglaterra y su
amigo Hardy fue a visitarlo. Hardy comentó que había llegado al hospital en un taxi de
matrícula N y esperaba que éste no fuese un mal presagio, ya que N era un número 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 sección es averiguar la matrícula del taxi que llevó a Hardy a
visitar a Ramanujan.
Ejercicio 6.1 Definir la relación × 
Ù Ó´·Æµ que se verifique si Æ es el cubo de un entero. Por
ejemplo,
¹ × 
Ù Ó ½´½¼¼¼µº
×
¹ × 
Ù Ó ½´½¼¼½µº
ÆÓ
Solución: Presentaremos distintas definiciones y comentaremos su eficiencia.
La primera solución realiza una búsqueda desde 1 hasta N.
× 
Ù Ó ½´Æµ ¹
ØÛ Ò´½¸Æ¸ µ¸
Æ × ¶ ¶ º
La segunda solución realiza una búsqueda desde 1 hasta 3
√
N.
97
98 Capítulo 6. Estilo y eficiencia en programación lógica
× 
Ù Ó ¾´Æµ ¹
ÓØ × ÖÓÙÒ ´Æ ´½»¿µµ¸
ØÛ Ò´½¸ ÓØ ¸ µ¸
Æ × ¶ ¶ º
La tercera solución utiliza predicados aritméticos predefinidos.
× 
Ù Ó ¿´Æµ ¹
Æ ÖÓÙÒ ´Æ ¶¶ ´½»¿µµ ¶¶ ¿º
Para comparar la eficiencia realizamos los siguientes experimentos:
¹ Ø Ñ ´ × 
Ù Ó ½´½¼¼¼¼¼½µµº
± ½¸¼¼¼¸¼¼¿ Ò Ö Ò
 ׸ ½º¾¿ ÈÍ Ò ½º¾ × 
ÓÒ × ´ ± È͸ ½¿¼½½ Ä Ô×µ
ÆÓ
¹ Ø Ñ ´ × 
Ù Ó ¾´½¼¼¼¼¼½µµº
± ½¼¿ Ò Ö Ò
 ׸ ¼º¼¼ ÈÍ Ò ¼º¼¼ × 
ÓÒ × ´¼± È͸ ÁÒ Ò Ø Ä Ô×µ
ÆÓ
¹ Ø Ñ ´ × 
Ù Ó ¿´½¼¼¼¼¼½µµº
± ¿ Ò Ö Ò
 ׸ ¼º¼¼ ÈÍ Ò ¼º¼¼ × 
ÓÒ × ´¼± È͸ ÁÒ Ò Ø Ä Ô×µ
ÆÓ
Se observa que la más eficiente es la tercera definición. La segunda se aproxima a la
segunda. La primera es muy ineficiente. En lo que sigue adoptaremos la tercera como
definicón de × 
Ù Ó.
× 
٠ӴƵ ¹
× 
Ù Ó ¿´Æµº
Ejercicio 6.2 Definir la relación ×
ÓÑÔÓÒ ´·Æ¸¹ ¸¹ µ que se verifique si e son dos cubos
cuya suma es Æ y, además, es menor o igual que . Por ejemplo,
¹ ×
ÓÑÔÓÒ ´½¼¼ ¸ ¸ µº
½¼¼¼
ÆÓ
Solución: Presentaremos distintas definiciones y comentaremos su eficiencia.
La primera definición realiza una búsqueda en e .
6.1. Número de Hardy 99
×
ÓÑÔÓÒ ½´Æ¸ ¸ µ ¹
ØÛ Ò´½¸Æ¸ µ¸
ØÛ Ò´½¸Æ¸ µ¸
× 
Ù Ó´ µ¸
× 
Ù Ó´ µ¸
¸
Æ × · º
La segunda definición realiza la búsqueda en y determina .
×
ÓÑÔÓÒ ¾´Æ¸ ¸ µ ¹
ØÛ Ò´½¸Æ¸ µ¸
× 
Ù Ó´ µ¸
× Æ ¹ ¸
¸
× 
Ù Ó´ µº
La tercera definición realiza una búsqueda acotada.
×
ÓÑÔÓÒ ¿´Æ¸ ¸ µ ¹
ÓØ × ÖÓÙÒ ´´Æ»¾µ ´½»¿µµ¸
ØÛ Ò´½¸ ÓØ ¸Åµ¸
× Å¶Å¶Å¸
× Æ¹ ¸
¸
× 
Ù Ó´ µº
Para comparar la eficiencia realizamos los siguientes experimentos:
¹ Ø Ñ ´ ×
ÓÑÔÓÒ ½´½ ¼ ¸ ¸ µµº
± ½½¸ ¿¾¸ Ò Ö Ò
 ׸ º ÈÍ Ò º ½ × 
ÓÒ × ´½¼¼± È͸ ½ ¼¼¿ Ä Ô×µ
ÆÓ
¹ Ø Ñ ´ ×
ÓÑÔÓÒ ¾´½ ¼ ¸ ¸ µµº
± ¸ ¼ Ò Ö Ò
 ׸ ¼º¼½ ÈÍ Ò ¼º¼½ × 
ÓÒ × ´½½¾± È͸ ¼¼¼ Ä Ô×µ
ÆÓ
¹ Ø Ñ ´ ×
ÓÑÔÓÒ ¿´½ ¼ ¸ ¸ µµº
± Ò Ö Ò
 ׸ ¼º¼¼ ÈÍ Ò ¼º¼¼ × 
ÓÒ × ´¼± È͸ ÁÒ Ò Ø Ä Ô×µ
ÆÓ
¹ Ø Ñ ´ ×
ÓÑÔÓÒ ½´¾¿¿½¸ ¸ µµº
100 Capítulo 6. Estilo y eficiencia en programación lógica
± ¸ ½¼¸ Ò Ö Ò
 ׸ º¿½ ÈÍ Ò º¿¿ × 
ÓÒ × ´½¼¼± È͸ ½ ½¿ ¿ Ä Ô×µ
½¼¼¼
½¿¿½
×
¹ Ø Ñ ´ ×
ÓÑÔÓÒ ¾´¾¿¿½¸ ¸ µµº
± ¸¼ ¾ Ò Ö Ò
 ׸ ¼º¼½ ÈÍ Ò ¼º¼½ × 
ÓÒ × ´½ ± È͸ ¼ ¾¼¼ Ä Ô×µ
½¼¼¼
½¿¿½
×
¹ Ø Ñ ´ ×
ÓÑÔÓÒ ¿´¾¿¿½¸ ¸ µµº
± ¿ Ò Ö Ò
 ׸ ¼º¼¼ ÈÍ Ò ¼º¼¼ × 
ÓÒ × ´¼± È͸ ÁÒ Ò Ø Ä Ô×µ
½¼¼¼
½¿¿½
×
Se observa que la más eficiente es la tercera definición. En lo que sigue adoptaremos la
tercera como definición de ×
ÓÑÔÓÒ .
×
ÓÑÔÓÒ ´Æ¸ ¸ µ ¹
×
ÓÑÔÓÒ ¿´Æ¸ ¸ µº
Ejercicio 6.3 Definir la relación Ö Ñ ÒÙ Ò´·Æµ que se verifique si Æ puede descomponerse en
suma de dos cubos exactamente de dos maneras distintas.
Solución: La definición de Ö Ñ ÒÙ Ò es
Ö Ñ Ò٠ҴƵ ¹
× ØÓ ´Ô Ö´ ¸ µ¸ ×
ÓÑÔÓÒ ´Æ¸ ¸ µ¸ ¸ ℄µº
Ejercicio 6.4 Definir la relación Ö Ý´¹Æµ que se verifique si Æ es el menor entero positivo que
satisface el predicado Ö Ñ ÒÙ Ò anterior. ¿Cuál es la la matrícula del taxi que llevó a Hardy a
visitar a Ramanujan?
Solución: La definición de Ö Ý es
Ö Ý´Æµ ¹
Ö Ý ÙܴƸ½µº
Ö Ý ÙܴƸƵ ¹
Ö Ñ Ò٠ҴƵ¸
º
Ö Ý ÙܴƸŵ ¹
Ž × Å·½¸
Ö Ý ÙܴƸ޵º
6.2. Subconjuntos de suma dada 101
La matrícula del taxi que llevó a Hardy a visitar a Ramanujan se calcula mediante
la siguiente consulta
¹ Ö Ý´Æµº
Æ ½ ¾
Por tanto, la matrícula del taxi es 1729.
6.2. Subconjuntos de suma dada
Ejercicio 6.5 Definir la relación ×Ù 
ÓÒ ÙÒØÓ ×ÙÑ ´·Ä½¸·Æ¸ ľµ que se verifique si ľ es
un subconjunto de Ľ tal que la suma de los elementos de ľ es Æ. Por ejemplo,
¹ ×Ù 
ÓÒ ÙÒØÓ ×ÙÑ ´ ½¼¸ ¸¿¸ ¸¾¸½℄¸ ¸Äµº
Ä ℄
Ä ¿¸ ℄
Ä ¸ ¾¸ ½℄
ÆÓ
¹ ×Ù 
ÓÒ ÙÒØÓ ×ÙÑ ´ ½¸¾¸¿℄¸¼¸Äµº
Ä ℄
ÆÓ
Solución: Presentaremos cuatro definiciones y comparemos su eficiencia.
La primera definición usa la relación ×Ù 
ÓÒ ÙÒØÓ definida en el ejercicio 1.17 (pá-
gina 20).
×Ù 
ÓÒ ÙÒØÓ ×ÙÑ ½´Ä½¸Æ¸Ä¾µ ¹
×Ù 
ÓÒ ÙÒØÓ´Ä½¸Ä¾µ¸
×ÙÑÐ ×Ø´Ä¾¸Æµº
En la segunda definición se adapta la definición de ×Ù 
ÓÒ ÙÒØÓ teniendo en cuenta
la suma de sus elementos.
×Ù 
ÓÒ ÙÒØÓ ×ÙÑ ¾´ ℄¸¼¸ ℄µº
×Ù 
ÓÒ ÙÒØÓ ×ÙÑ ¾´ Ľ℄¸Æ¸ ľ℄µ ¹
Æ ¸
ƽ × Æ¹ ¸
×Ù 
ÓÒ ÙÒØÓ ×ÙÑ ¾´Ä½¸Æ½¸Ä¾µº
×Ù 
ÓÒ ÙÒØÓ ×ÙÑ ¾´ Ľ℄¸Æ¸Ä¾µ ¹
×Ù 
ÓÒ ÙÒØÓ ×ÙÑ ¾´Ä½¸Æ¸Ä¾µº
102 Capítulo 6. Estilo y eficiencia en programación lógica
En la tercera definición se define de forma dinámica la relación ×Ù 
ÓÒ ÙÒØÓ×´·Ä½¸·Æº¹Ëµ
que se verifica si Ë es la lista de subconjuntos de Ë tales que la suma de sus elementos es
Æ.
¹ ÝÒ Ñ 
 ×Ù 
ÓÒ ÙÒØÓ× ×ÙÑ 
 Ð
ÙÐ Ó× ¿»¿º
×Ù 
ÓÒ ÙÒØÓ ×ÙÑ ¿´Ä½¸Æ¸Ä¾µ ¹
×Ù 
ÓÒ ÙÒØÓ× ×ÙÑ 
 Ð
ÙÐ Ó× ¿´Ä½¸Æ¸Ëµ¸ ¸
Ñ Ñ Ö´Ä¾¸Ëµº
×Ù 
ÓÒ ÙÒØÓ ×ÙÑ ¿´Ä½¸Æ¸Ä¾µ ¹
Ò Ðдĸ×Ù 
ÓÒ ÙÒØÓ ×ÙÑ ¿ ÙܴĽ¸Æ¸Äµ¸Ëµ¸
×× ÖØ ´×Ù 
ÓÒ ÙÒØÓ× ×ÙÑ 
 Ð
ÙÐ Ó× ¿´Ä½¸Æ¸Ëµµ¸
Ñ Ñ Ö´Ä¾¸Ëµº
×Ù 
ÓÒ ÙÒØÓ ×ÙÑ ¿ ÙÜ´ ℄¸¼¸ ℄µº
×Ù 
ÓÒ ÙÒØÓ ×ÙÑ ¿ ÙÜ´ Ľ℄¸Æ¸ ľ℄µ ¹
Æ ¸
ƽ × Æ¹ ¸
×Ù 
ÓÒ ÙÒØÓ ×ÙÑ ¿´Ä½¸Æ½¸Ä¾µº
×Ù 
ÓÒ ÙÒØÓ ×ÙÑ ¿ ÙÜ´ Ľ℄¸Æ¸Ä¾µ ¹
×Ù 
ÓÒ ÙÒØÓ ×ÙÑ ¿´Ä½¸Æ¸Ä¾µº
La cuarta definición es una variación 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 Æ.
¹ ÝÒ Ñ 
 ×Ù 
ÓÒ ÙÒØÓ× ×ÙÑ 
 Ð
ÙÐ Ó× »¿º
×Ù 
ÓÒ ÙÒØÓ ×ÙÑ ´Ä½¸Æ¸Ä¾µ ¹
×Ù 
ÓÒ ÙÒØÓ× ×ÙÑ 
 Ð
ÙÐ Ó× ´Æ¸Ä½¸Ëµ¸ ¸
Ñ Ñ Ö´Ä¾¸Ëµº
×Ù 
ÓÒ ÙÒØÓ ×ÙÑ ´Ä½¸Æ¸Ä¾µ ¹
Ò Ðдĸ×Ù 
ÓÒ ÙÒØÓ ×ÙÑ ÙܴĽ¸Æ¸Äµ¸Ëµ¸
×× ÖØ ´×Ù 
ÓÒ ÙÒØÓ× ×ÙÑ 
 Ð
ÙÐ Ó× ´Æ¸Ä½¸Ëµµ¸
Ñ Ñ Ö´Ä¾¸Ëµº
×Ù 
ÓÒ ÙÒØÓ ×ÙÑ ÙÜ´ ℄¸¼¸ ℄µº
×Ù 
ÓÒ ÙÒØÓ ×ÙÑ ÙÜ´ Ľ℄¸Æ¸ ľ℄µ ¹
Æ ¸
ƽ × Æ¹ ¸
×Ù 
ÓÒ ÙÒØÓ ×ÙÑ ´Ä½¸Æ½¸Ä¾µº
6.3. Coloreado de mapas 103
×Ù 
ÓÒ ÙÒØÓ ×ÙÑ ÙÜ´ Ľ℄¸Æ¸Ä¾µ ¹
×Ù 
ÓÒ ÙÒØÓ ×ÙÑ ´Ä½¸Æ¸Ä¾µº
Para comparar la eficiencia se realizan los siguientes experimentos.
¹ ÒÙÑÐ ×Ø´½¸¾¼¸ Ľµ¸ Ø Ñ ´ Ò Ðдĸ×Ù 
ÓÒ ÙÒØÓ ×ÙÑ ½´ Ľ¸½¼¸Äµ¸ ˵µº
± ¾ ¸½ ¸ Ò Ö Ò
 ׸ º¼ ÈÍ Ò º½ × 
ÓÒ ×
¹ ÒÙÑÐ ×Ø´½¸¾¼¸ Ľµ¸ Ø Ñ ´ Ò Ðдĸ×Ù 
ÓÒ ÙÒØÓ ×ÙÑ ¾´ Ľ¸½¼¸Äµ¸ ˵µº
± ½¸ Ò Ö Ò
 ׸ ¼º¼¼ ÈÍ Ò ¼º¼¼ × 
ÓÒ ×
¹ ÒÙÑÐ ×Ø´½¸¾¼¸ Ľµ¸ Ø Ñ ´ Ò Ðдĸ×Ù 
ÓÒ ÙÒØÓ ×ÙÑ ¿´ Ľ¸½¼¸Äµ¸ ˵µº
± ¿¸¾ ¾ Ò Ö Ò
 ׸ ¼º¼½ ÈÍ Ò ¼º¼½ × 
ÓÒ ×
¹ ÒÙÑÐ ×Ø´½¸¾¼¸ Ľµ¸ Ø Ñ ´ Ò Ðдĸ×Ù 
ÓÒ ÙÒØÓ ×ÙÑ ´ Ľ¸½¼¸Äµ¸ ˵µº
± ¿¸¾ ¾ Ò Ö Ò
 ׸ ¼º¼½ ÈÍ Ò ¼º¼½ × 
ÓÒ ×
¹ ÒÙÑÐ ×Ø´½¸½ ¼¸ Ľµ¸ Ø Ñ ´ Ò Ðдĸ×Ù 
ÓÒ ÙÒØÓ ×ÙÑ ¾´ Ľ¸ ¼¸Äµ¸ ˵µº
± ½¼ ¸ ¸ Ò Ö Ò
 ׸ º ¼ ÈÍ Ò º × 
ÓÒ ×
¹ ÒÙÑÐ ×Ø´½¸½ ¼¸ Ľµ¸ Ø Ñ ´ Ò Ðдĸ×Ù 
ÓÒ ÙÒØÓ ×ÙÑ ¿´ Ľ¸ ¼¸Äµ¸ ˵µº
± ¿¸½¾¾ Ò Ö Ò
 ׸ ½ º ½ ÈÍ Ò ¾½º × 
ÓÒ ×
¹ ÒÙÑÐ ×Ø´½¸½ ¼¸ Ľµ¸ Ø Ñ ´ Ò Ðдĸ×Ù 
ÓÒ ÙÒØÓ ×ÙÑ ´ Ľ¸ ¼¸Äµ¸ ˵µº
± ¿¸½ Ò Ö Ò
 ׸ ½º ÈÍ Ò ¾º½ × 
ÓÒ ×
Se observa que la más eficiente es la cuarta definición.
6.3. Coloreado de mapas
Ejercicio 6.6 Un mapa puede representarse mediante la relación Ñ Ô ´Æ¸Äµ donde Æ es el nom-
bre del 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
Ñ Ô ´ ÑÔÐÓ ½¸
¹ ¸
¸ ℄¸ ¹ ¸ ¸ ℄¸ 
¹ ¸ ¸ ℄¸ ¹ ¸ ¸
¸ ¸ ¸ ℄¸
¹ ¸ ¸ ℄¸ ¹ 
¸ ¸ ℄¸ ¹ ¸ ¸ ℄℄µº
Ñ Ô ´ ÑÔÐÓ ¾¸
¹ ¸ ¸ ℄¸ ¹ ¸
¸ ¸ ℄¸ 
¹ ¸ ¸ ¸ ℄¸ ¹ 
¸ ¸ ℄¸ ¹ ¸ ¸ ¸ ℄¸
¹ 
¸ ¸ ¸ ℄¸ ¹ ¸ ¸ ℄¸ ¹ ¸ ¸ ℄¸ ¹ ¸ ¸ ℄¸ ¹ ¸ ¸ ℄¸
¹ ¸ ¸
¸ ¸ ¸ ¸ ¸ ¸ ¸ ℄℄µº
104 Capítulo 6. Estilo y eficiencia en programación lógica
c d
a b
e
f g
a b c d
e f
g h
i j
k
Figura 6.1: Ejemplos de mapas
Definir la relación 
ÓÐÓÖ 
 Ò´·Å¸·Ä ¸¹Ëµ que se verifique si Ë es una lista de pares formados
por una región del mapa Å y uno de los colores de la lista de colores Ä tal que las regiones vecinas
tengan colores distintos. Por ejemplo,
¹ 
ÓÐÓÖ 
 Ò´ ÑÔÐÓ ½¸ ½¸¾¸¿℄¸Ëµº
Ë ¹½¸ ¹¾¸ 
¹¾¸ ¹¿¸ ¹½¸ ¹½¸ ¹¾℄
¿Qué número de colores se necesitan para colorear el segundo mapa? ¿De cuántas formas dis-
tintas puede colorearse con dicho número?
Solución: Presentamos dos definiciones y comparamos su eficiencia.
La primera definición de 
ÓÐÓÖ 
 Ò es por generación y prueba.

ÓÐÓÖ 
 Ò ½´Å¸Ä ¸Ëµ ¹
Ñ Ô ´Å¸Äµ¸

ÓÐÓÖ 
 Ò ½ ÙÜ´Ä¸Ä ¸Ëµº

ÓÐÓÖ 
 Ò ½ ÙÜ´ ℄¸ ¸ ℄µº

ÓÐÓÖ 
 Ò ½ ÙÜ´ ʹΠÄ℄¸Ä ¸ ʹ Ë℄µ ¹
Ñ Ñ Ö´ ¸Ä µ¸

ÓÐÓÖ 
 Ò ½ ÙÜ´Ä¸Ä ¸Ëµ¸
ÒÓØ´´Ñ Ñ Ö´Ê½¸Îµ¸ Ñ Ñ Ö´Ê½¹ ¸Ëµµµº
En la segunda definición de 
ÓÐÓÖ 
 Ò se usa un acumulador y se adelanta las
pruebas.

ÓÐÓÖ 
 Ò ¾´Å¸Ä ¸Ëµ ¹
Ñ Ô ´Å¸Äµ¸

ÓÐÓÖ 
 Ò ¾ ÙÜ´Ä¸Ä ¸ ℄¸Ëµº

ÓÐÓÖ 
 Ò ¾ ÙÜ´ ℄¸ ¸Ë¸Ëµº
6.3. Coloreado de mapas 105

ÓÐÓÖ 
 Ò ¾ ÙÜ´ ʹΠÄ℄¸Ä ¸ ¸Ëµ ¹
Ñ Ñ Ö´ ¸Ä µ¸
ÒÓØ´´Ñ Ñ Ö´Ê½¸Îµ¸ Ñ Ñ Ö´Ê½¹ ¸ µµµ¸

ÓÐÓÖ 
 Ò ¾ ÙÜ´Ä¸Ä ¸ ʹ ℄¸Ëµº
Para comparar las dos definiciones usaremos el segundo mapa.
¹ Ø Ñ ´
ÓÐÓÖ 
 Ò ½´ ÑÔÐÓ ¾¸ ½¸¾¸¿¸ ℄¸Ëµµº
± ½ ¸ ¼ ¸¿½ Ò Ö Ò
 ׸ º½ ÈÍ Ò º¾¼ × 
ÓÒ × ´½¼¼± È͸ ¾ ¼¿½¾ Ä Ô×µ
Ë ¹½¸ ¹¾¸ 
¹½¸ ¹¾¸ ¹¿¸ ¹¿¸ ¹½¸ ¹½¸ ¹¾¸ ¹¿¸ ¹ ℄
¹ Ø Ñ ´
ÓÐÓÖ 
 Ò ¾´ ÑÔÐÓ ¾¸ ½¸¾¸¿¸ ℄¸Ëµµº
± Ò Ö Ò
 ׸ ¼º¼¼ ÈÍ Ò ¼º¼¼ × 
ÓÒ × ´¼± È͸ ÁÒ Ò Ø Ä Ô×µ
Ë ¹ ¸ ¹¿¸ ¹¾¸ ¹½¸ ¹½¸ ¹¿¸ ¹¿¸ ¹¾¸ 
¹½¸ ¹¾¸ ¹½℄
Se observa que la segunda es más 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 número Æ de formas distintas de colorear el segundo mapa se calcula mediante
la siguiente consulta.
¹ Ò Ðд ˸
ÓÐÓÖ 
 Ò ¾´ ÑÔÐÓ ¾¸ ½¸¾¸¿¸ ℄¸ ˵¸ ĵ¸ Ð Ò Ø ´ ĸƵº
Æ ½¼¿¾
106 Capítulo 6. Estilo y eficiencia en programación lógica
Capítulo 7
Aplicaciones de programación
declarativa
7.1. Formación de grupos minimales de asignaturas com-
patibles
Mediante la relación Ð ×Ø 
Ð × ´ ¸ ¸Äµ se representa la información de los
alumnos según 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 información.
Ð ×Ø 
Ð × ´
½¸ × ½¸ ½¸ ℄µº
Ð ×Ø 
Ð × ´
½¸ × ¾¸ ½¸ ¾¸ ¿℄µº
Ð ×Ø 
Ð × ´
½¸ × ¿¸ ½¸ ¿℄µº
Ð ×Ø 
Ð × ´
½¸ × ¸ ¾¸ ¸ ¸ ℄µº
Ð ×Ø 
Ð × ´
½¸ × ¸ ¾¸ ¸ ℄µº
Ð ×Ø 
Ð × ´
½¸ × ¸ ¸ ℄µº
Ð ×Ø 
Ð × ´
½¸ × ¸ ¿¸ ℄µº
Ð ×Ø 
Ð × ´
½¸ × ¸ ¸ ¸ ℄µº
Ð ×Ø 
Ð × ´
¾¸ × ¸ ¸ ½½℄µº
Ð ×Ø 
Ð × ´
¾¸ × ½¼¸ ½¼¸ ½¾℄µº
Ð ×Ø 
Ð × ´
¾¸ × ½½¸ ½¼¸ ½½℄µº
Ð ×Ø 
Ð × ´
¾¸ × ½¾¸ ¸ ½¾℄µº
Ejercicio 7.1 Definir la relación × Ò ØÙÖ ×´· ¸¹Äµ que se verifique si Ä es la lista de asig-
naturas del curso . Por ejemplo,
¹ × Ò ØÙÖ ×´
½¸Äµº
Ä × ½¸ × ¾¸ × ¿¸ × ¸ × ¸ × ¸ × ¸ × ℄
107
108 Capítulo 7. Aplicaciones de programación declarativa
¹ × Ò ØÙÖ ×´
¾¸Äµº
Ä × ¸ × ½¼¸ × ½½¸ × ½¾℄
Solución: La definición de × Ò ØÙÖ × es
× Ò ØÙÖ ×´ ¸Äµ ¹
Ò Ðд ¸Ð ר 
Ð × ´ ¸ ¸ µ¸Äµº
Ejercicio 7.2 Definir la relación ÖÙÔÓ Ò
ÓÑÔ Ø Ð ´·Äµ que se verifique si la lista de asig-
naturas Ä es incompatible (es decir, algún alumno está en las listas de clase de más de una
asignatura de la lista Ä). Por ejemplo,
¹ ÖÙÔÓ Ò
ÓÑÔ Ø Ð ´ × ½¸ × ¾℄µº
×
¹ ÖÙÔÓ Ò
ÓÑÔ Ø Ð ´ × ½¸ × ¸ × ℄µº
ÆÓ
Solución: La definición de ÖÙÔÓ Ò
ÓÑÔ Ø Ð es
ÖÙÔÓ Ò
ÓÑÔ Ø Ð ´Äµ ¹
× Ð 
Ø´ ¸Ä¸Êµ¸
Ñ Ñ Ö´ ¸Êµ¸
Ð ×Ø 
Ð × ´ ¸ ¸Ä µ¸
Ð ×Ø 
Ð × ´ ¸ ¸Ä µ¸
Ñ Ñ Ö´ ¸Ä µ¸
Ñ Ñ Ö´ ¸Ä µº
Ejercicio 7.3 Definir la relación Ð ×Ø Ò
ÓÑÔ Ø Ð ´·Äµ que verifique si la lista de grupos
de asignaturas Ä es incompatible (es decir, contiene algún grupo incompatible de asignaturas).
Por ejemplo,
¹ Ð ×Ø Ò
ÓÑÔ Ø Ð ´ × ¸ × ½¾℄¸ × ½½¸ × ½¼℄℄µº
×
¹ Ð ×Ø Ò
ÓÑÔ Ø Ð ´ × ½½¸ × ½¾℄¸ × ¸ × ½¼℄℄µº
ÆÓ
Solución: La definición de Ð ×Ø Ò
ÓÑÔ Ø Ð es
Ð ×Ø Ò
ÓÑÔ Ø Ð ´Èµ ¹
Ñ Ñ Ö´ ¸Èµ¸
ÖÙÔÓ Ò
ÓÑÔ Ø Ð ´ µº
7.1. Formación de grupos minimales de asignaturas compatibles 109
Ejercicio 7.4 Definir la relación ÜØ Ò× Ò´·Ä½¸· ¸¹Ä¾µ que se verifique si ľ es la lista obte-
nida añadiendo como primer elemento de un elemento de Ľ o ľ es la lista obtenida añadiendo
℄ a Ľ. Por ejemplo,
¹ ÜØ Ò× Ò´ ℄¸ ¸ 
℄℄¸ ¸ µº
¸ ℄¸ ¸ 
℄℄
℄¸ ¸ ¸ 
℄℄
℄¸ ¸ 
℄¸ ℄℄
ÆÓ
Solución: La definición de ÜØ Ò× Ò es
ÜØ Ò× Ò´ ℄¸ ¸ ℄℄µº
ÜØ Ò× Ò´ Ä Ä½℄¸ ¸ Ä℄ Ľ℄µº
ÜØ Ò× Ò´ Ä Ä½℄¸ ¸ Ä Ä¾℄µ ¹
ÜØ Ò× Ò´Ä½¸ ¸Ä¾µº
Ejercicio 7.5 Definir la relación Ô ÖØ 
 Ò´·Ä¸¹Èµ que se verifique si È es una partición de la
lista Ä (es decir, un conjunto obtenido distribuyendo los elementos de Ä en conjuntos no vacíos y
sin elementos comunes). Por ejemplo,
¹ Ô ÖØ 
 Ò´ ¸ ¸
℄¸Èµº
È ¸ ¸ 
℄℄
È ¸ 
℄¸ ℄℄
È ¸ 
℄¸ ℄℄
È 
℄¸ ¸ ℄℄
È 
℄¸ ℄¸ ℄℄
ÆÓ
Solución: La definición de Ô ÖØ 
 Ò es
Ô ÖØ 
 Ò´ ℄¸ ℄µº
Ô ÖØ 
 Ò´ Ľ℄¸Ä¾µ ¹
Ô ÖØ 
 ҴĽ¸Ä¿µ¸
ÜØ Ò× Ò´Ä¿¸ ¸Ä¾µº
Ejercicio 7.6 Definir la relación ÖÙÔ 
 Ò 
ÓÑÔ Ø Ð × Ò ØÙÖ ×´· ¸¹Èµ que se
verifique si È es una partición compatible de las asignaturas del curso . Por ejemplo,
¹ ÖÙÔ 
 Ò 
ÓÑÔ Ø Ð × Ò ØÙÖ ×´
¾¸Èµº
È × ½½¸ × ½¾℄¸ × ¸ × ½¼℄℄
È × ½½¸ × ½¾℄¸ × ½¼℄¸ × ℄℄
×
110 Capítulo 7. Aplicaciones de programación declarativa
Solución: La definición de ÖÙÔ 
 Ò 
ÓÑÔ Ø Ð × Ò ØÙÖ × es
ÖÙÔ 
 Ò 
ÓÑÔ Ø Ð × Ò ØÙÖ ×´ ¸Èµ ¹
× Ò ØÙÖ ×´ ¸Äµ¸
Ô ÖØ 
 Ҵĸȵ¸
ÒÓØ´Ð ר Ò
ÓÑÔ Ø Ð ´Èµµº
Ejercicio 7.7 Definir la relación ÖÙÔ 
 Ò 
ÓÑÔ Ø Ð Ñ Ò Ñ Ð´· ¸¹Èµ que se verifique
si È es una partición compatible de las asignaturas del curso con el menor número posible de
grupos de asignaturas. Por ejemplo,
¹ ÖÙÔ 
 Ò 
ÓÑÔ Ø Ð Ñ Ò Ñ Ð´
¾¸Èµº
È × ½½¸ × ½¾℄¸ × ¸ × ½¼℄℄
ÆÓ
Calcular las agrupaciones compatibles minimales del curso 
½.
Solución: La definición ÖÙÔ 
 Ò 
ÓÑÔ Ø Ð Ñ Ò Ñ Ð es
ÖÙÔ 
 Ò 
ÓÑÔ Ø Ð Ñ Ò Ñ Ð´ ¸Èµ ¹
ÖÙÔ 
 Ò 
ÓÑÔ Ø Ð × Ò ØÙÖ ×´ ¸Èµ¸
Ð Ò Ø ´È¸Æµ¸
ÒÓØ´´ ÖÙÔ 
 Ò 
ÓÑÔ Ø Ð × Ò ØÙÖ ×´ ¸È½µ¸Ð Ò Ø ´È½¸Åµ¸Å Ƶµº
Las agrupaciones compatibles minimales del curso 
½ se calculan mediante la con-
sulta
¹ ÖÙÔ 
 Ò 
ÓÑÔ Ø Ð Ñ Ò Ñ Ð´
½¸Èµº
È × ¿¸ × ¸ × ℄¸ × ½¸ × ¸ × ℄¸ × ¾¸ × ℄℄
È × ¾¸ × ℄¸ × ½¸ × ¸ × ℄¸ × ¿¸ × ¸ × ℄℄
ÆÓ
7.2. Simulación de una calculadora básica
El objetivo de los siguientes ejercicios es la simulación de una calculadora básica.
Para ello consideraremos que en cada momento la calculadora se encuentra en un de-
terminado estado caracterizado por una lista con cuatro elementos Í ¸ÍÌ ¸ÍÇ ¸ÎÁÅ℄
donde
Í es el último cálculo efectuado,
ÍÌ es la última tecla activada,
7.2. Simulación de una calculadora básica 111
ÍÇ es el último operador activado y
ÎÁÅ es el valor impreso.
El estado inicial es ¼¸ ¸ ¸¼℄ y está definido por
ר Ó Ò 
 д ¼¸ ¸ ¸¼℄µº
Las acciones posibles son pulsar un dígito, una operación aritmética o la de resul-
tado y están definidas por


 Ò´ µ ¹ × ØÓ´ µº


 Ò´ µ ¹ × ÓÔ Ö 
 Ò´ µº


 Ò´ µ ¹ × Ö ×ÙÐØ Ó´ µº
× ØÓ´¼µº
× ØÓ´½µº
× ØÓ´¾µº
× ØÓ´¿µº
× ØÓ´ µº
× ØÓ´ µº
× ØÓ´ µº
× ØÓ´ µº
× ØÓ´ µº
× ØÓ´ µº
× ÓÔ Ö 
 Ò´·µº
× ÓÔ Ö 
 Ò´¹µº
× ÓÔ Ö 
 Ò´¶µº
× ÓÔ Ö 
 Ò´»µº
× Ö ×ÙÐØ Ó´ µº
En la siguiente tabla se muestran los estados de la calculadora correspondientes a
las acciones indicadas en la última columna
112 Capítulo 7. Aplicaciones de programación declarativa
estado tecla
´ ¼¸ ¸ ¸ ¼µ ¿
´ ¼¸ ¿¸ ¸ ¿µ ·
´ ¿¸ ·¸ ·¸ ¿µ ¾
´ ¿¸ ¾¸ ·¸ ¾µ ½
´ ¿¸ ½¸ ·¸ ¾½µ ¶
´¾ ¸ ¶¸ ¶¸ ¾ µ ¾
´¾ ¸ ¾¸ ¶¸ ¾µ
´ ¸ ¸ ¸ µ
Es decir, si se parte del estado inicial y se realizan las acciones
¿ · ¾ ½ ¶ ¾
se obtiene como resultado el número .
Ejercicio 7.8 Definir la relación ØÖ Ò× 
 Ò´· ½¸· ¸ ¾µ que se verifique si ¾ es el estado
obtenido aplicando la acción al estado ½; es decir, si ½ es Í ¸ÍÌ ¸ÍÇ ¸ÎÁÅ℄, entonces
Si es un dígito, entonces
• si ÍÌ es un dígito, ¾ es Í ¸ ¸ÍÇ ¸½¼¶ÎÁÅ· ℄;
• en otro caso, ¾ es Í ¸ ¸ÍÇ ¸ ℄.
Si no es un dígito, entonces
• si ÍÇ es una operación, ¾ es ÍÇ ´Í ¸ÎÁŵ¸ ¸ ¸ÍÇ ´Í ¸ÎÁŵ℄
• en otro caso, ¾ es ÎÁŸ ¸ ¸ÎÁÅ℄.
Por ejemplo,
¹ ר Ó Ò 
 д ½µ¸
ØÖ Ò× 
 Ò´ ½¸¿¸ ¾µ¸
ØÖ Ò× 
 Ò´ ¾¸·¸ ¿µ¸
ØÖ Ò× 
 Ò´ ¿¸¾¸ µ¸
ØÖ Ò× 
 Ò´ ¸½¸ µ¸
ØÖ Ò× 
 Ò´ ¸¶¸ µ¸
ØÖ Ò× 
 Ò´ ¸¾¸ µ¸
ØÖ Ò× 
 Ò´ ¸ ¸ µº
½ ¼¸ ¸ ¸ ¼℄
¾ ¼¸ ¿¸ ¸ ¿℄
¿ ¿¸ ·¸ ·¸ ¿℄
¿¸ ¾¸ ·¸ ¾℄
¿¸ ½¸ ·¸ ¾½℄
7.2. Simulación de una calculadora básica 113
¾ ¸ ¶¸ ¶¸ ¾ ℄
¾ ¸ ¾¸ ¶¸ ¾℄
¸ ¸ ¸ ℄
Solución: Presentamos tres definiciones.
La primera definición de ØÖ Ò× 
 Ò es
ØÖ Ò× 
 Ò ½´ Í ¸ÍÌ ¸ÍÇ ¸ÎÁÅ℄¸ ¸ µ ¹
´ × ØÓ´ µ ¹
´ × ØÓ´ÍÌ µ ¹
× ½¼¶ÎÁÅ· ¸
Í ¸ ¸ÍÇ ¸ ℄
± · × ØÓ´ÍÌ µ ¹
Í ¸ ¸ÍÇ ¸ ℄ µ
± · × ØÓ´ µ ¹
´ × ÓÔ Ö 
 Ò´ÍÇ µ ¹
Ì ºº ÍÇ ¸Í ¸ÎÁÅ℄¸
× Ì¸
¸ ¸ ¸ ℄
± · × ÓÔ Ö 
 Ò´ÍÇ µ ¹
ÎÁŸ ¸ ¸ÎÁÅ℄ µµº
La segunda definición de ØÖ Ò× 
 Ò es
ØÖ Ò× 
 Ò ¾´ Í ¸ÍÌ ¸ÍÇ ¸ÎÁÅ℄¸ ¸ µ ¹
´ × ØÓ´ µ¸ × ØÓ´ÍÌ µ ¹
× ½¼¶ÎÁÅ· ¸
Í ¸ ¸ÍÇ ¸ ℄
× ØÓ´ µ¸ · × ØÓ´ÍÌ µ ¹
Í ¸ ¸ÍÇ ¸ ℄
· × ØÓ´ µ¸ × ÓÔ Ö 
 Ò´ÍÇ µ ¹
Ì ºº ÍÇ ¸Í ¸ÎÁÅ℄¸
× Ì¸
¸ ¸ ¸ ℄
· × ØÓ´ µ¸ × Ö ×ÙÐØ Ó´ÍÇ µ ¹
ÎÁŸ ¸ ¸ÎÁÅ℄ µº
La tercera definición de ØÖ Ò× 
 Ò es
ØÖ Ò× 
 Ò ¿´ Í ¸ÍÌ ¸ÍÇ ¸ÎÁÅ℄¸ ¸ Í ¸ ¸ÍÇ ¸ ℄µ ¹
× ØÓ´ µ¸
× ØÓ´ÍÌ µ¸
114 Capítulo 7. Aplicaciones de programación declarativa
× ½¼¶ÎÁÅ· º
ØÖ Ò× 
 Ò ¿´ Í ¸ÍÌ ¸ÍÇ ¸ ÎÁÅ℄¸ ¸ Í ¸ ¸ÍÇ ¸ ℄µ ¹
× ØÓ´ µ¸
· × ØÓ´ÍÌ µº
ØÖ Ò× 
 Ò ¿´ Í ¸ ÍÌ ¸ÍÇ ¸ÎÁÅ℄¸ ¸ ¸ ¸ ¸ ℄µ ¹
· × ØÓ´ µ¸
× ÓÔ Ö 
 Ò´ÍÇ µ¸
Ì ºº ÍÇ ¸Í ¸ÎÁÅ℄¸
× Ìº
ØÖ Ò× 
 Ò ¿´ Í ¸ ÍÌ ¸ ¸ÎÁÅ℄¸ ¸ ÎÁŸ ¸ ¸ÎÁÅ℄µ ¹
· × ØÓ´ µº
En lo que sige usaremos la primera.
ØÖ Ò× 
 Ò´ ½¸ ¸ ¾µ ¹
ØÖ Ò× 
 Ò ½´ ½¸ ¸ ¾µº
Ejercicio 7.9 Definir la relación ØÖ Ò× 
 ÓÒ ×´· ½¸·Ä¸ ¾µ que se verifique si ¾ es el esta-
do obtenido aplicando las acciones de la lista Ä al estado ½. Por ejemplo,
¹ ר Ó Ò 
 д ½µ¸ ØÖ Ò× 
 ÓÒ ×´ ½¸ ¿¸·¸¾¸½¸¶¸¾¸ ℄¸ ¾µº
¾ ¸ ¸ ¸ ℄
Solución: La definición de ØÖ Ò× 
 ÓÒ × es
ØÖ Ò× 
 ÓÒ ×´ ¸ ℄¸ µº
ØÖ Ò× 
 ÓÒ ×´ ½¸ Ä℄¸ ¿µ ¹
ØÖ Ò× 
 Ò´ ½¸ ¸ ¾µ¸
ØÖ Ò× 
 ÓÒ ×´ ¾¸Ä¸ ¿µº
Ejercicio 7.10 Definir la relación 

 ÓÒ ×´ ĵ que se verifique si Ä es una lista cuyos ele-
mentos son acciones. Por ejemplo,
¹ 

 ÓÒ ×´ ¾¸·¸¿¸ ℄µº
×
¹ 

 ÓÒ ×´ ¾¸·¸¿ ℄µº
ÆÓ
Usarlo para calcular el número de posibles listas de acciones de longitud 3.
Solución: La definición de 

 ÓÒ × es
7.2. Simulación de una calculadora básica 115


 ÓÒ ×´ ℄µº


 ÓÒ ×´ Ä℄µ ¹


 Ò´ µ¸


 ÓÒ ×´Äµº
El número Æ de listas de acciones de longitud 3 se calcula mediante la consulta
¹ Ò Ðд ĸ´Ð Ò Ø ´ ĸ¿µ¸ 

 ÓÒ ×´ ĵµ¸ Ä Ä¿µ¸ Ð Ò Ø ´ Ä Ä¿¸Æµº
Æ ¿¿
Ejercicio 7.11 Para realizar una operación en la calculadora no todas las combinaciones de te-
clas (acciones) son válidas. Por ejemplo, no podemos teclear dos operaciones consecutivas o divi-
dir por cero. La siguiente relación define las acciones válidas


 ÓÒ × Ú Ð ×´Äµ ¹


 ÓÒ ×´Äµ¸
ÑÔ Þ ÔÓÖ ØÓ´Äµ¸
ÒÓØ´Ø Ò ÓÔ Ö 
 ÓÒ × 
ÓÒ× 
ÙØ Ú ×´Äµµ¸
ÒÓØ´Ø Ò Ö ×ÙÐØ Ó ÒØ ÖÑ Ó´Äµµ¸
ÒÓØ´ Ú ÔÓÖ 
 ÖӴĵµ¸
Ø ÖÑ Ò Ò ØÓ Ý Ö ×ÙÐØ Ӵĵº
En los apartados de este ejercicio se definen de las relaciones auxiliares.
1. Definir la relación ÑÔ Þ ÔÓÖ ØÓ´ ĵ que se verifique si el primer elemento de la
lista Ä es un dígito.
2. Definir la relación Ø Ò ÓÔ Ö 
 ÓÒ × 
ÓÒ× 
ÙØ Ú ×´ ĵ que se verifique si la lista Ä
contiene dos operaciones consecutivas.
3. Definir la relación Ø Ò Ö ×ÙÐØ Ó ÒØ ÖÑ Ó´ Ä) que se verifique si la lista Ä con-
tiene el símbolo en una posición que no es la última.
4. Definir la relación Ú ÔÓÖ 
 ÖÓ´ ĵ que se verifique si en la lista Ä aparecen de
manera consecutiva el símbolo » y un cero.
5. Definir la relación Ø ÖÑ Ò Ò ØÓ Ý Ö ×ÙÐØ Ó´ ĵ que se verifique si en la lista
Ä los últimos elementos son un dígito y el símbolo .
Solución:
116 Capítulo 7. Aplicaciones de programación declarativa
ÑÔ Þ ÔÓÖ ØÓ´ Ä℄µ ¹
× ØÓ´ µº
Ø Ò ÓÔ Ö 
 ÓÒ × 
ÓÒ× 
ÙØ Ú ×´Äµ ¹
ÔÔ Ò ´ ¸ ¸ ℄¸Äµ¸
× ÓÔ Ö 
 Ò´ µ¸
× ÓÔ Ö 
 Ò´ µº
Ø Ò Ö ×ÙÐØ Ó ÒØ ÖÑ Ó´Äµ ¹
ÔÔ Ò ´ ¸ ¸ ℄¸Äµº
Ú ÔÓÖ 
 ÖӴĵ ¹
ÔÔ Ò ´ ¸ »¸¼ ℄¸Äµº
Ø ÖÑ Ò Ò ØÓ Ý Ö ×ÙÐØ Ӵĵ ¹
Ö Ú Ö× ´Ä¸ ¸ ℄µ¸
× ØÓ´ µº
Ejercicio 7.12 Calcular el número de posibles listas de acciones válidas de longitud 3.
Solución: El número Æ de listas de acciones válidad de longitud 3 se calcula me-
diante la consulta
¹ Ò Ðд ĸ´Ð Ò Ø ´ ĸ¿µ¸ 

 ÓÒ × Ú Ð ×´ ĵµ¸ Ä Ä¿µ¸ Ð Ò Ø ´ Ä Ä¿¸Æµº
Æ ½¼¼
Ejercicio 7.13 Definir la relación 
 Ð
ÙÐÓ´·Æ¸·Å¸¹Äµ que se verifique si Ä es una lista de Å
acciones válidas que aplicadas al estado inicial da como resultado el número Æ. Por ejemplo,
¹ 
 Ð
ÙÐÓ´ ¸¾¸Äµº
Ä ¸ ℄
ÆÓ
¹ 
 Ð
ÙÐÓ´ ¸¿¸Äµº
Ä ¼¸ ¸ ℄
ÆÓ
¹ 
 Ð
ÙÐÓ´ ¸ ¸Äµº
Ä ¼¸ ¼¸ ¸ ℄
Ä ¼¸ ·¸ ¸ ℄
Ä ½¸ ·¸ ¸ ℄
Ä ½¸ ¶¸ ¸ ℄
Ä ¾¸ ·¸ ¿¸ ℄
×
7.3. Problema de las subastas 117
Solución:

 Ð
ÙÐӴƸŸĵ ¹
ר Ó Ò 
 д ½µ¸
Ð Ò Ø ´Ä¸Åµ¸


 ÓÒ × Ú Ð ×´Äµ¸
ØÖ Ò× 
 ÓÒ ×´ ½¸Ä¸ Ƹ ¸ ¸Æ℄µº
7.3. Problema de las subastas
Ejercicio 7.14 En una subasta se hacen distintas ofertas. Cada oferta incluye un lote de pro-
ductos y un precio por dicho lote. Las ofertas realizadas se representan mediante la relación
Ó ÖØ ´Ç¸Ä¸Èµ que se verifica si Ç es una oferta por el lote Ä con un coste È. Por ejemplo,
Ó ÖØ ´ ¸ ½¸¾¸¿℄¸¿¼µ representa la oferta en la que se puja por el lote compuesto por los
objetos ½, ¾ y ¿ por un valor de ¿¼ euros.
Para la aceptación 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 relación 
 ÔØ ´¹Äµ que se verifique si Ä es una lista de ofertas aceptadas. Por
ejemplo, si las ofertas realizadas se definen por
Ó ÖØ ´ ¸ ½¸¾¸¿℄¸¿¼µº
Ó ÖØ ´ ¸ ½¸¾¸¿℄¸¾¼µº
Ó ÖØ ´
¸ ℄¸¾¼µº
Ó ÖØ ´ ¸ ¾¸ ℄¸¾¼µº
Ó ÖØ ´ ¸ ½¸¾℄¸¾¼µº
entonces,
¹ 
 ÔØ ´Äµº
Ä ¸ 
℄
Solución: La definición de 
 ÔØ es

 ÔØ ´Äµ ¹

 ÔØ Ð ´Äµ¸
Ò Ò
 ´Ä¸ µ¸
ÒÓØ´´ 
 ÔØ Ð ´Ä½µ¸ Ò Ò
 ´Ä½¸ ½µ¸ ½ µµº
118 Capítulo 7. Aplicaciones de programación declarativa
La relación 
 ÔØ Ð ´ ĵ 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
definición anterior de Ó ÖØ ×»¿,
¹ 
 ÔØ Ð ´Äµº
Ä ¸ 
℄
Ä ℄
Ä ¸ 
℄
Ä ℄
Ä 
¸ ℄
Ä 
℄
Ä ℄
Ä ℄
Ä ℄
ÆÓ

 ÔØ Ð ´Äµ ¹
Ð ×Ø Ó ÖØ ״Ľµ¸
×Ù 
ÓÒ ÙÒØÓ´Ä¸Ä½µ¸
× 
 ÔØ Ð ´Äµº
La relación Ð ×Ø Ó ÖØ ×´¹Äµ se verifica si Ä es la lista de todas las ofertas. Por
ejemplo, con la definición anterior de Ó ÖØ ×»¿,
¹ Ð ×Ø Ó ÖØ ״ĵº
Ä ¸ ¸ 
¸ ¸ ℄
Ð ×Ø Ó ÖØ ״ĵ ¹
Ò ÐÐ´Ç¸Ó ÖØ ´Ç¸ ¸ µ¸Äµº
La relación ×Ù 
ÓÒ ÙÒØÓ´ Ľ¸·Ä¾µ se verifica si Ľ es un subconjunto de ľ. Por
ejemplo,
¹ ×Ù 
ÓÒ ÙÒØÓ´Ä¸ ¸ ¸
℄µº
Ä ¸ ¸ 
℄
Ä ¸ ℄
Ä ¸ 
℄
Ä ℄
Ä ¸ 
℄
Ä ℄
Ä 
℄
Ä ℄
ÆÓ
7.3. Problema de las subastas 119
×Ù 
ÓÒ ÙÒØÓ´ ℄¸ ℄µº
×Ù 
ÓÒ ÙÒØÓ´ Ľ℄¸ ľ℄µ ¹
×Ù 
ÓÒ ÙÒØÓ´Ä½¸Ä¾µº
×Ù 
ÓÒ ÙÒØÓ´Ä½¸ ľ℄µ ¹
×Ù 
ÓÒ ÙÒØÓ´Ä½¸Ä¾µº
La relación × 
 ÔØ Ð ´·Äµ se verifica si la lista de ofertas Ä es aceptable; es decir,
no contiene ofertas con objetos comunes en sus lotes. Por ejemplo, con la definición
anterior de Ó ÖØ ×»¿,
¹ × 
 ÔØ Ð ´ 
¸ ℄µº
ÆÓ
¹ × 
 ÔØ Ð ´ 
¸ ℄µº
×
× 
 ÔØ Ð ´Äµ ¹
ÒÓØ´ × Ò 
 ÔØ Ð ´Äµµº
La relación × Ò 
 ÔØ Ð ´·Äµ se verifica si Ä es una lista de ofertas inaceptable;
es decir, contiene ofertas con objetos comunes en sus lotes. Por ejemplo, con la definición
anterior de Ó ÖØ ×»¿,
¹ × Ò 
 ÔØ Ð ´ 
¸ ℄µº
×
¹ × Ò 
 ÔØ Ð ´ 
¸ ℄µº
ÆÓ
× Ò 
 ÔØ Ð ´Äµ ¹
Ñ Ñ Ö´Ç½¸Äµ¸
Ñ Ñ Ö´Ç¾¸Äµ¸
ǽ Ǿ¸
Ó ÖØ ´Ç½¸Ä½¸ µ¸
Ó ÖØ ´Ç¾¸Ä¾¸ µ¸
× ×ÓÐ Ô Ò´Ä½¸Ä¾µº
La relación × ×ÓÐ Ô Ò´·Ä½¸·Ä¾µ se verifica si Ľ y ľ se solapan; es decir, tienen
elementos comunes. Por ejemplo,
120 Capítulo 7. Aplicaciones de programación declarativa
¹ × ×ÓÐ Ô Ò´ ¸ ¸
℄¸ ¸ ¸ ℄µº
×
¹ × ×ÓÐ Ô Ò´ ¸ ¸
℄¸ ¸ ℄µº
ÆÓ
× ×ÓÐ Ô Ò´Ä½¸Ä¾µ ¹
Ñ Ñ Ö´ ¸Ä½µ¸
Ñ Ñ Ö´ ¸Ä¾µº
La relación Ò Ò
 ´·Ä¸¹ µ se verifica si la ganancia de la lista de ofertas L es .
Por ejemplo, con la definición anterior de Ó ÖØ ×»¿,
¹ Ò Ò
 ´ ¸
℄¸ µº
¼
Ò Ò
 ´ ℄¸¼µº
Ò Ò
 ´ Ç Ä℄¸ µ ¹
Ó ÖØ ´Ç¸ ¸ ½µ¸
Ò Ò
 ´Ä¸ ¾µ¸
× ½· ¾º
Bibliografía
[1] J. A. Alonso. Introducción a la programación lógica con Prolog, 2006. En
ØØÔ »»ÛÛÛº
׺Ù׺ ×» ÐÓÒ×Ó»ÔÙ Ð 
 
 ÓÒ ×»¾¼¼ ¹ ÒØ ÔÖÓÐÓ ºÔ .
[2] J. A. Alonso. Temas de “Programación 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. Addison–Wesley, 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. Springer–Verlag, 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). Addison–Wesley,
1990.
[10] J. P. Delahaye. Cours de Prolog avec Turbo Prolog (Eléments fondamentaux). Eyrolles,
1988.
[11] U. Nilsson and J. Maluszynski. Logic, Programming and Prolog. 2 edition, 2000. En
ØØÔ »»ÛÛÛº ºÐ Ùº× » ÙÐ Ò »ÐÔÔ.
[12] R. A. O’Keefe. 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. Springer–Verlag,
1990.
121
122 Bibliografía
[15] L. Sterling and E. Shapiro. L’art de Prolog. Masson, 1990.
[16] T. Van Le. Techniques of Prolog Programming (with implementation of logical negation
and quantified goals). John Wiley, 1993.
Índice alfabético
ÐØ ÑÓ, 15
Ò 
Ó×, 83


 ÓÒ × Ú Ð ×, 115


 ÓÒ ×, 114

 ÔØ 
ÓØ ½, 42

 ÔØ Ð , 118

 ÔØ , 117

 ÔØ , 41
Ö Ö, 55
ÖÙÔ 
 Ò 
ÓÑÔ Ø Ð × Ò ØÙÖ ×, 110
ÖÙÔ 
 Ò 
ÓÑÔ Ø Ð Ñ Ò Ñ Ð, 110
ÔÐ Ò , 96
× Ò ØÙÖ ×, 108

 Ð
ÙÐÓ, 117

 Ð
ÙÐ , 61

 Ñ ÒÓ, 46

 × , 36

 × Ó, 35

Ð × 
 , 88

Ð Ù×ÙÖ ØÖ Ò× Ø Ú , 93

Ó 
 Ö 
Ø , 72

Ó 
 Ö Ù
 , 70

Ó 
 , 69

ÓÐÓÖ 
 Ò, 104

ÓÑÔÖ Ñ , 68

ÓÒ
, 12

ÓÒ×, 11

ÓÖÖ 
ØÓ, 46

ÓØ ×ÙÔ Ö ÓÖ, 73

Ö 
 ÒØ , 74

Ö 
 Ñ ÒØÓ×, 60

Ù ÒØ , 84

Ó 
 , 71

Ö 
 ÒØ , 75
×
ÓÑÔÓÒ , 98
ÒØ × × ÖÖ , 75
ÒØ , 74
Ö Ò
 , 54
Ú ×ÓÖ × ÔÖÓÔ Ó×, 87
ÜÝ, 45
Ð Ñ ÒØÓ Ò, 28
Ð Ñ Ò Ö 
 ×, 82
Ð Ñ Ò ÚÓ
 Ð ×, 91
Ð Ñ Ò , 65
ÑÔ ÕÙ Ø , 68
ÒØÖ , 27
× Ò 
Ó, 83
× 
 ÔØ Ð , 119
× 
Ù Ó, 97
× ÕÙ Ð Ø ÖÓ, 89
× Ò 
 ÔØ Ð , 119
ÜÔÓÒ ÒØ Ó×, 58
ÜØ Ò× Ò, 109

ØÓÖ Ð 
ÓÒ Ñ ÑÓÖ , 78

ØÓÖ Ð ÒÚ Ö×Ó, 77

ØÓÖ Ð, 22, 78

ØÓÖ Þ 
 Ò, 61
Ñ Ð , 34

 Ò 
 Ñ ÒØÓ, 37
ÓÒ 

 , 22
Ò Ð, 41
, 85
Ò Ò
 , 120
Ò Ö 
 Ò, 82
ÖÙÔÓ Ò
ÓÑÔ Ø Ð , 108
Ö Ý, 100
123
124 Índice alfabético
Ó, 36
ÓÖ ÞÓÒØ Ð, 32
Ò× ÖØ , 17
ÒÚ Ö× ½, 14
ÒÚ Ö× ¾, 14
Ð Ö 
Ù Ö Ó×, 63
Ð ×Ø 
ÓÒ ÙÒØÓ, 59
Ð ×Ø 
ÓØ , 23
Ð ×Ø Ò Ñ ÖÓ×, 27
Ð ×Ø Ó ÖØ ×, 118
Ð ×Ø ÔÓ× 
 ÓÒ ×, 95
Ð ×Ø Ò
ÓÑÔ Ø Ð , 108
Ð ×Ø , 26
ÐÓÒ ØÙ ÑÔ Ö, 19
ÐÓÒ ØÙ Ñ Ü, 86
ÐÓÒ ØÙ Ô Ö, 19
ÐÓÒ ØÙ ×
Ñ, 64
ÐÓÒ ØÙ ×, 85
ÐÓÒ ØÙ , 23, 92
Ñ Ü ÑÓ, 21, 47
Ñ ÐØ ÔÐÓ, 62
Ñ Ü Ð ×Ø , 24
Ñ
 , 22
Ñ Ñ Ö
 , 53
Ñ ÒÓÖ Ú ×ÓÖ ÔÖÓÔ Ó, 61
Ñ ÒÓÖ ÕÙ Ò Ö Ñ ÝÓÖ, 86
Ñ ÒÓÖ, 89
ÑÓÚ Ñ ÒØÓ, 44
ÑÙÐØ ÔÐ 
 , 28
Ò Ñ ÖÓ× Ð ×Ø , 91
Ò Ñ ÖÓ×, 90
ÒÓÑ Ö , 93
ÒÙÐÓ, 41
ÓÔ Ö 
 Ò Ð ×Ø , 90
ÓÖ Ò , 25
Ô Ð Ò ÖÓÑÓ, 15
Ô Ð Ö Ñ Ü Ñ Ð, 92
Ô Ð Ö × Ñ Ü Ñ Ð ×, 92
Ô ÖØ 
 Ò, 109
Ô Ò ÐØ ÑÓ, 16
Ô ÖÑÙØ 
 Ò, 18
Ô Ö×ÓÒ , 37
Ô ÖØ Ò 
 , 11
ÔÓÔÙÐ Ö ×, 83
ÔÖ Ñ ÖÓ, 9
ÔÖÓÑ Ó, 88
Ö Ñ ÒÙ Ò, 100
Ö Ô Ø Ó×, 66
Ö Ô Ø Ó, 65
Ö ×ØÓ, 10
ÖÓØ , 20
× ÐØ , 45
× ×ÓÐ Ô Ò, 120
× Ð 

 ÓÒ , 17
× Ô Ö , 56
×ÓÐÙ
 Ò, 44
×Ù 
ÓÒ ÙÒØÓ Ñ Ü Ñ Ð, 66
×Ù 
ÓÒ ÙÒØÓ ×ÙÑ , 101
×Ù 
ÓÒ ÙÒØÓ, 20, 119
×Ù Ð ×Ø , 18
×Ù
 × Ò, 85
×Ù Ð Ó, 38
×ÙÑ ØÓ×, 62
×ÙÑ Ú ×ÓÖ × ÔÖÓÔ Ó×, 87
×ÙÑ Ð Ö × 
Ù Ö Ó×, 63
×ÙÑ Ð ×Ø , 25, 87
×ÙÑ Ô Ö
 Ð, 26
×ÙÑ Ô Ö ×, 57
×ÙÑ ÔÓ× 
 ÓÒ ×, 67
Ø ÔÓ, 88
ØÓ Ó× Ù Ð ×, 19
ØÓØ Ð, 38
ØÖ Ù

 Ò, 94
ØÖ Ò× ÓÖÑ , 95
ØÖ Ò× 
 Ò, 113
ØÖ Ò× 
 ÓÒ ×, 114
ØÖ Ò×, 41
Ú ÖØ 
 Ð, 32

Más contenido relacionado

PPTX
Autómatas y complejidad
PPTX
Unidad 3: Herencia Ejercicio 2
PDF
Ingeniería web_Unidad 3
PPTX
Teoría de autómatas
PPTX
Topicos Avanzados de Programacion - Unidad 3 componentes y librerias
PPTX
REGISTRO DE BANDERAS
PPT
Polimorfismo
PPT
Compiladores
Autómatas y complejidad
Unidad 3: Herencia Ejercicio 2
Ingeniería web_Unidad 3
Teoría de autómatas
Topicos Avanzados de Programacion - Unidad 3 componentes y librerias
REGISTRO DE BANDERAS
Polimorfismo
Compiladores

La actualidad más candente (20)

DOCX
simulacion numeros pseudoaleatorios
PPTX
Equivalencia de autómatas finitos y expresiones regulares.
PDF
Caso De Uso
PDF
Metodologias para el desarrollo de los sistemas expertos
PDF
Taller de modelamiento_de_software
PDF
Tema 4 excepciones por gio
PPTX
Probabilistic Reasoning
DOC
INTRODUCCION A LAS REDES NEURONALES ARTIFICIALES
PPTX
Lenguajes de simulación
PPTX
Metodologia scrum presentacion
PPT
Introduccion redes neuronales artificiales
PPTX
Análisis y Diseño de Algoritmos
PDF
Programación Modular
PDF
Trabajo Casos de Uso
PPTX
Knowledge representation in AI
PDF
Automatas y gramaticas
PPTX
Interfaz gráfica de usuario y eventos (introducción)
PPTX
Ejercicios de python
PPTX
Recursividad directa e indirecta
PPTX
Planificacion De Proyectos De Software
simulacion numeros pseudoaleatorios
Equivalencia de autómatas finitos y expresiones regulares.
Caso De Uso
Metodologias para el desarrollo de los sistemas expertos
Taller de modelamiento_de_software
Tema 4 excepciones por gio
Probabilistic Reasoning
INTRODUCCION A LAS REDES NEURONALES ARTIFICIALES
Lenguajes de simulación
Metodologia scrum presentacion
Introduccion redes neuronales artificiales
Análisis y Diseño de Algoritmos
Programación Modular
Trabajo Casos de Uso
Knowledge representation in AI
Automatas y gramaticas
Interfaz gráfica de usuario y eventos (introducción)
Ejercicios de python
Recursividad directa e indirecta
Planificacion De Proyectos De Software
Publicidad

Destacado (6)

PDF
Manual prolog
PPTX
Presentacion de inteligencia artificial
PPT
Jflambert lyada - ayudantia 2 prolog
PPTX
Inteligencia artificial 2
PDF
Practicas prolog
PDF
3 Things Every Sales Team Needs to Be Thinking About in 2017
Manual prolog
Presentacion de inteligencia artificial
Jflambert lyada - ayudantia 2 prolog
Inteligencia artificial 2
Practicas prolog
3 Things Every Sales Team Needs to Be Thinking About in 2017
Publicidad

Similar a Ejercicios programacion prolog (20)

PDF
Ejercicios de programacion resueltos
PDF
Apuntes De Matematicas Discretas
PDF
Apuntes De Matematicas Discretas
PDF
Apuntes De Matematicas Discretas
PDF
Apuntes De Matematicas Discretas
PDF
Algoritmos programacion-python
PDF
Guía #8 - Ciclos Iterativos Anidados.pdf
PDF
Algoritmos programacion-python
PDF
Algoritmos y programacion_i_-_con_lengua
PDF
Matematica Discreta
PDF
Intr a la matematica discreta
PDF
Fundamentos de Programacion.pdf
PDF
Algoritmos y estructura_de_datos
PDF
Algoritmos y estructura_de_datos
PDF
Algoritmos y estructura_de_datos
PDF
y estructura_de_datos
PDF
Algebra superior i reyes
PPTX
Ejercicios Python parte 4
PDF
Matematicas en ingenieria_con_matlab_y_o
Ejercicios de programacion resueltos
Apuntes De Matematicas Discretas
Apuntes De Matematicas Discretas
Apuntes De Matematicas Discretas
Apuntes De Matematicas Discretas
Algoritmos programacion-python
Guía #8 - Ciclos Iterativos Anidados.pdf
Algoritmos programacion-python
Algoritmos y programacion_i_-_con_lengua
Matematica Discreta
Intr a la matematica discreta
Fundamentos de Programacion.pdf
Algoritmos y estructura_de_datos
Algoritmos y estructura_de_datos
Algoritmos y estructura_de_datos
y estructura_de_datos
Algebra superior i reyes
Ejercicios Python parte 4
Matematicas en ingenieria_con_matlab_y_o

Último (20)

PDF
SESION 12 INMUNIZACIONES - CADENA DE FRÍO- SALUD FAMILIAR - PUEBLOS INDIGENAS...
PDF
COMUNICACION EFECTIVA PARA LA EDUCACION .pdf
PDF
Fundamentos_Educacion_a_Distancia_ABC.pdf
PDF
Breve historia de los Incas -- Patricia Temoche [Temoche, Patricia] -- Breve ...
PDF
GUIA DE: CANVA + INTELIGENCIA ARTIFICIAL
PDF
Crear o Morir - Andres Oppenheimer Ccesa007.pdf
PDF
el - LIBRO-PACTO-EDUCATIVO-GLOBAL-OIEC.pdf
PDF
Metodologías Activas con herramientas IAG
DOCX
UNIDAD DE APRENDIZAJE 5 AGOSTO tradiciones
PDF
Integrando la Inteligencia Artificial Generativa (IAG) en el Aula
DOCX
III Ciclo _ Plan Anual 2025.docx PARA ESTUDIANTES DE PRIMARIA
PDF
ciencias-1.pdf libro cuarto basico niños
PDF
Romper el Circulo de la Creatividad - Colleen Hoover Ccesa007.pdf
PDF
CONFERENCIA-Deep Research en el aula universitaria-UPeU-EduTech360.pdf
PDF
Cronograma de clases de Práctica Profesional 2 2025 UDE.pdf
PDF
La Evaluacion Formativa en Nuevos Escenarios de Aprendizaje UGEL03 Ccesa007.pdf
PDF
Conecta con la Motivacion - Brian Tracy Ccesa007.pdf
PDF
Unidad de Aprendizaje 5 de Matematica 1ro Secundaria Ccesa007.pdf
DOCX
V UNIDAD - PRIMER GRADO. del mes de agosto
DOCX
PROYECTO DE APRENDIZAJE para la semana de fiestas patrias
SESION 12 INMUNIZACIONES - CADENA DE FRÍO- SALUD FAMILIAR - PUEBLOS INDIGENAS...
COMUNICACION EFECTIVA PARA LA EDUCACION .pdf
Fundamentos_Educacion_a_Distancia_ABC.pdf
Breve historia de los Incas -- Patricia Temoche [Temoche, Patricia] -- Breve ...
GUIA DE: CANVA + INTELIGENCIA ARTIFICIAL
Crear o Morir - Andres Oppenheimer Ccesa007.pdf
el - LIBRO-PACTO-EDUCATIVO-GLOBAL-OIEC.pdf
Metodologías Activas con herramientas IAG
UNIDAD DE APRENDIZAJE 5 AGOSTO tradiciones
Integrando la Inteligencia Artificial Generativa (IAG) en el Aula
III Ciclo _ Plan Anual 2025.docx PARA ESTUDIANTES DE PRIMARIA
ciencias-1.pdf libro cuarto basico niños
Romper el Circulo de la Creatividad - Colleen Hoover Ccesa007.pdf
CONFERENCIA-Deep Research en el aula universitaria-UPeU-EduTech360.pdf
Cronograma de clases de Práctica Profesional 2 2025 UDE.pdf
La Evaluacion Formativa en Nuevos Escenarios de Aprendizaje UGEL03 Ccesa007.pdf
Conecta con la Motivacion - Brian Tracy Ccesa007.pdf
Unidad de Aprendizaje 5 de Matematica 1ro Secundaria Ccesa007.pdf
V UNIDAD - PRIMER GRADO. del mes de agosto
PROYECTO DE APRENDIZAJE para la semana de fiestas patrias

Ejercicios programacion prolog

  • 1. Ejercicios de programación declarativa con Prolog José A. Alonso Jiménez Grupo de Lógica Computacional Dpto. de Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Sevilla, 1 de Enero de 2006 (Versión de 20 de septiembre de 2007)
  • 2. 2 Esta obra está bajo una licencia Reconocimiento–NoComercial–CompartirIgual 2.5 Spain de Creative Commons. Se permite: copiar, distribuir y comunicar públicamente la obra hacer obras derivadas Bajo las condiciones siguientes: Reconocimiento. Debe reconocer los créditos 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, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos 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.
  • 3. Índice general Introducción 6 1. Operaciones con listas 9 1.1. Primer elemento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.2. Resto de una lista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.3. Construcción de listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.4. Relación de pertenencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.5. Concatenación de listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.6. Lista inversa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.7. Palíndromo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 1.8. Último elemento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.9. Penúltimo elemento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.10. Selección de un elemento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.11. Inserción de un elemento en una lista . . . . . . . . . . . . . . . . . . . . . 17 1.12. Sublista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 1.13. Permutación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 1.14. Lista con todos sus elementos iguales . . . . . . . . . . . . . . . . . . . . . 18 1.15. Paridad de la longitud de una lista . . . . . . . . . . . . . . . . . . . . . . . 19 1.16. Rotación de un elemento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 1.17. Subconjunto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 2. Aritmética 21 2.1. Máximo de dos números . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.2. Factorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.3. Sucesión de Fibonacci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.4. Máximo común divisor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.5. Longitud de una lista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.6. Lista de números acotada por su longitud . . . . . . . . . . . . . . . . . . . 23 2.7. Máximo de una lista de números . . . . . . . . . . . . . . . . . . . . . . . . 24 2.8. Suma de los elementos de una lista . . . . . . . . . . . . . . . . . . . . . . . 24 2.9. Lista de números ordenada . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3
  • 4. 4 Índice general 2.10. Suma parcial de una lista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2.11. Lista de Æ veces el número Æ . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 2.12. Generación de lista de números . . . . . . . . . . . . . . . . . . . . . . . . . 27 2.13. Intervalo entero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 2.14. K–ésimo elemento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 2.15. Multiplicación de las ocurrencias de los elementos de una lista . . . . . . . 28 3. Estructuras 31 3.1. Segmentos como objetos estructurados . . . . . . . . . . . . . . . . . . . . . 31 3.2. Base de datos familiar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 3.3. Autómata no–determinista . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 3.4. El problema del mono y el plátano . . . . . . . . . . . . . . . . . . . . . . . 44 3.5. Movimientos del caballo del ajedrez . . . . . . . . . . . . . . . . . . . . . . 45 3.6. Máximo elemento de un árbol binario . . . . . . . . . . . . . . . . . . . . . 47 4. Retroceso, corte y negación 49 4.1. Ejemplos de uso del corte . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 4.2. Árboles de deducción de Ñ Ñ Ö . . . . . . . . . . . . . . . . . . . . . . 53 4.3. Diferencia de conjuntos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 4.4. Agregación de un elemento a un conjunto . . . . . . . . . . . . . . . . . . . 55 4.5. Separación de una lista de números en positivos y negativos . . . . . . . . 56 4.6. Suma de los números pares de una lista de números . . . . . . . . . . . . 56 4.7. Exponente de dos en la factorización de un número . . . . . . . . . . . . . 58 4.8. Transformación de lista a conjunto . . . . . . . . . . . . . . . . . . . . . . . 58 4.9. Signos de crecimientos de sucesiones numéricas . . . . . . . . . . . . . . . 60 4.10. Descomposición en factores primos . . . . . . . . . . . . . . . . . . . . . . . 60 4.11. Menor elemento que cumple una propiedad . . . . . . . . . . . . . . . . . 61 4.12. Números libres de cuadrados . . . . . . . . . . . . . . . . . . . . . . . . . . 62 4.13. Suma de los números libres de cuadrados . . . . . . . . . . . . . . . . . . . 63 4.14. Máximo número de una lista . . . . . . . . . . . . . . . . . . . . . . . . . . 64 4.15. Longitud de las subsucesiones comunes maximales . . . . . . . . . . . . . 64 4.16. Elementos repetidos en una lista . . . . . . . . . . . . . . . . . . . . . . . . 65 4.17. Subconjunto maximal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 4.18. Suma de los elementos con posiciones múltiplos de n . . . . . . . . . . . . 67 4.19. Compresión de listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 4.20. Empaquetamiento de listas . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 4.21. Codificación por longitud . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 4.22. Codificación reducida por longitud . . . . . . . . . . . . . . . . . . . . . . . 70 4.23. Decodificación de lista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 4.24. Codificación reducida directa . . . . . . . . . . . . . . . . . . . . . . . . . . 72 4.25. Cota superior de una lista de números . . . . . . . . . . . . . . . . . . . . . 73
  • 5. Índice general 5 4.26. Dientes de sierra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 5. Programación lógica de segundo orden 77 5.1. Determinación de un número por su factorial . . . . . . . . . . . . . . . . . 77 5.2. Árbol de resolución y definiciones equivalentes . . . . . . . . . . . . . . . 79 5.3. Nodos de una generación en una lista de árboles binarios . . . . . . . . . . 80 5.4. Lista de elementos únicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 5.5. Elementos más frecuentes de una lista . . . . . . . . . . . . . . . . . . . . . 83 5.6. Problema 3n + 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 5.7. Números perfectos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 5.8. Determinación de triángulos equiláteros . . . . . . . . . . . . . . . . . . . . 89 5.9. Operación binaria aplicada a listas . . . . . . . . . . . . . . . . . . . . . . . 90 5.10. Números en un término . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 5.11. Palabra sin vocales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 5.12. Palabras maximales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 5.13. Clausura transitiva de una relación . . . . . . . . . . . . . . . . . . . . . . . 92 5.14. Traducción de cifras a palabras . . . . . . . . . . . . . . . . . . . . . . . . . 93 5.15. Transformación de lista dependiente de la posición . . . . . . . . . . . . . 94 5.16. Aplanamiento de listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 6. Estilo y eficiencia en programación lógica 97 6.1. Número de Hardy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 6.2. Subconjuntos de suma dada . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 6.3. Coloreado de mapas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 7. Aplicaciones de programación declarativa 107 7.1. Formación de grupos minimales de asignaturas compatibles . . . . . . . . 107 7.2. Simulación de una calculadora básica . . . . . . . . . . . . . . . . . . . . . 110 7.3. Problema de las subastas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 Bibliografía 121 Indice de definiciones 122
  • 7. Introducción El objetivo del presente trabajo es presentar una colección de ejercicios para la asig- natura “Programación declarativa” de tercer curso de la Ingeniería Informática. Estos ejercicios complementa los apuntes de introducción a la programación decla- rativa con Prolog ([1]) y a las transparencias de clase ([2]). Todos los ejercicios se han comprobado usando la versión 5.6.18 de SWI Prolog. 7
  • 9. Capítulo 1 Operaciones con listas Una lista es la lista vacía o se compone de un primer elemento y un resto, que es una lista. En Prolog, la lista vacía se representa por ℄ y las listas no vacía son de la forma Ä℄ donde es la cabeza y Ä es el resto. 1.1. Primer elemento Ejercicio 1.1 Definir la relación ÔÖ Ñ ÖÓ´ ĸ µ que se verifique si es el primer elemento de la lista Ä. Por ejemplo, ¹ ÔÖ Ñ ÖÓ´ ¸ ¸ ℄¸ µº Obtener las respuestas a las siguientes preguntas: ¹ ÔÖ Ñ ÖÓ´ ¸ ¸ ℄¸ µº ¹ ÔÖ Ñ ÖÓ´ ¸ ℄¸ µº ¹ ÔÖ Ñ ÖÓ´ ¸ µº Solución: La definición de ÔÖ Ñ ÖÓ es ÔÖ Ñ ÖÓ´ ℄¸ µº Las respuestas a las preguntas son ¹ ÔÖ Ñ ÖÓ´ ¸ ¸ ℄¸ µº ¹ ÔÖ Ñ ÖÓ´ ¸ ¸ ℄¸ µº ¹ ÔÖ Ñ ÖÓ´ ¸ ℄¸ µº 9
  • 10. 10 Capítulo 1. Operaciones con listas ¹ ÔÖ Ñ ÖÓ´ ¸ µº ℄ 1.2. Resto de una lista Ejercicio 1.2 Definir la relación Ö ×ØÓ´ Ľ¸ ľµ que se verifique si ľ es la lista obtenida a partir de la lista Ľ suprimiendo el primer elemento. Por ejemplo, ¹ Ö ×ØÓ´ ¸ ¸ ℄¸Äµº Ä ¸ ℄ Obtener las respuestas a las siguientes preguntas: ¹ Ö ×ØÓ´ Ä℄¸ ¸ ℄µº ¹ Ö ×ØÓ´Ä¸ ¸ ℄µº Solución: La definición de Ö ×ØÓ es Ö ×ØÓ´ Ä℄¸Äµº Las respuestas a las preguntas son ¹ Ö ×ØÓ´ Ä℄¸ ¸ ℄µº Ä ¸ ℄ ¹ Ö ×ØÓ´Ä¸ ¸ ℄µº Ä ¸ ¸ ℄ 1.3. Construcción de listas Ejercicio 1.3 Definir la relación ÓÒ×´ ¸ Ľ¸ ľµ que se verifique si ľ es la lista obtenida añadiéndole a Ľ como primer elemento. Por ejemplo, ¹ ÓÒ×´ ¸ ¸ ℄¸Äµº Ä ¸ ¸ ℄ Obtener las respuestas correspondientes a las siguientes preguntas: ¹ ÓÒ×´ ¸ ¸ ℄¸ ¸ ¸ ℄µº ¹ ÓÒ×´ ¸Ä¸ ¸ ¸ ℄µº ¹ ÓÒ×´ ¸Ä¸ ¸ ¸ ℄µº ¹ ÓÒ×´ ¸Ä¸ ¸ ¸ ℄µº
  • 11. 1.4. Relación de pertenencia 11 Solución: La definición de ÓÒ× es ÓÒ×´ ¸Ä¸ Ä℄µº Las respuestas a las preguntas son ¹ ÓÒ×´ ¸ ¸ ℄¸ ¸ ¸ ℄µº ¹ ÓÒ×´ ¸Ä¸ ¸ ¸ ℄µº Ä ¸ ℄ ¹ ÓÒ×´ ¸Ä¸ ¸ ¸ ℄µº ÆÓ ¹ ÓÒ×´ ¸Ä¸ ¸ ¸ ℄µº Ä ¸ ℄ 1.4. Relación de pertenencia Ejercicio 1.4 Definir la relación Ô ÖØ Ò ´ ¸ ĵ que se verifique si es un elemento de la lista Ä. Por ejemplo, ¹ Ô ÖØ Ò ´ ¸ ¸ ¸ ℄µº × ¹ Ô ÖØ Ò ´ ¸ ¸ ¸ ℄µº ÆÓ Utilizar el programa para responder a las siguientes cuestiones: 1. ¿Es un elemento de ¸ ¸ ¸ ℄? 2. ¿Cuáles son los elementos de ¸ ¸ ℄? 3. ¿Cuáles son los elementos comunes de ¸ ¸ ℄, y ¸ ¸ ℄? Solución: La definición de Ô ÖØ Ò ´ ¸Äµ, por recursión en Ä, es Ô ÖØ Ò ´ ¸ ℄µº Ô ÖØ Ò ´ ¸ Ä℄µ ¹ Ô ÖØ Ò ´ ¸Äµº Las respuesta a las preguntas son 1. ¿Es un elemento de ¸ ¸ ¸ ℄?
  • 12. 12 Capítulo 1. Operaciones con listas ¹ Ô ÖØ Ò ´ ¸ ¸ ¸ ¸ ℄µº × 2. ¿Cuáles son los elementos de ¸ ¸ ℄? ¹ Ô ÖØ Ò ´ ¸ ¸ ¸ ℄µº ÆÓ 3. ¿Cuáles son los elementos comunes de ¸ ¸ ℄, y ¸ ¸ ℄? ¹ Ô ÖØ Ò ´ ¸ ¸ ¸ ℄µ¸ Ô ÖØ Ò ´ ¸ ¸ ¸ ℄µº ÆÓ Nota: La relación Ô ÖØ Ò se corresponde con la definida Ñ Ñ Ö. 1.5. Concatenación de listas Ejercicio 1.5 Definir la relación ÓÒ ´ Ľ¸ ľ¸ Ä¿µ que se verifique si Ä¿ es la lista obtenida escribiendo los elementos de ľ a continuación de los elementos de Ľ. Por ejemplo, ¹ ÓÒ ´ ¸ ℄¸ ¸ ¸ ℄¸Äµº Ä ¸ ¸ ¸ ¸ ℄ Utilizar el programa para responder a las siguientes cuestiones: 1. ¿Qué lista hay que añadirle al lista ¸ ℄ para obtener ¸ ¸ ¸ ℄? 2. ¿Qué listas hay que concatenar para obtener ¸ ℄? 3. ¿Pertenece a la lista ¸ ¸ ℄? 4. ¿Es ¸ ℄ una sublista de ¸ ¸ ¸ ℄? 5. ¿Es ¸ ℄ una sublista de ¸ ¸ ¸ ℄? 6. ¿Cuál es el último elemento de ¸ ¸ ¸ ℄? Solución: La definición de ÓÒ ´Ä½¸Ä¾¸Ä¿µ, por recursión en Ľ, es
  • 13. 1.5. Concatenación de listas 13 ÓÒ ´ ℄¸Ä¸Äµº ÓÒ ´ Ľ℄¸Ä¾¸ Ä¿℄µ ¹ ÓÒ ´Ä½¸Ä¾¸Ä¿µº Las repuestas a las cuestiones son 1. ¿Qué lista hay que añadirle al lista ¸ ℄ para obtener ¸ ¸ ¸ ℄? ¹ ÓÒ ´ ¸ ℄¸Ä¸ ¸ ¸ ¸ ℄µº Ä ¸ ℄ 2. ¿Qué listas hay que concatenar para obtener ¸ ℄? ¹ ÓÒ ´Ä½¸Ä¾¸ ¸ ℄µº Ľ ℄ ľ ¸ ℄ Ľ ℄ ľ ℄ Ľ ¸ ℄ ľ ℄ ÆÓ 3. ¿Pertenece a la lista ¸ ¸ ℄? ¹ ÓÒ ´Ä½¸ ľ℄¸ ¸ ¸ ℄µº Ľ ℄ ľ ℄ × ¹ ÓÒ ´ ¸ ℄¸ ¸ ¸ ℄µº × 4. ¿Es ¸ ℄ una sublista de ¸ ¸ ¸ ℄? ¹ ÓÒ ´ ¸ ¸ ℄¸ ¸ ¸ ¸ ℄µº × 5. ¿Es ¸ ℄ una sublista de ¸ ¸ ¸ ℄? ¹ ÓÒ ´ ¸ ¸ ℄¸ ¸ ¸ ¸ ℄µº ÆÓ 6. ¿Cuál es el último elemento de ¸ ¸ ¸ ℄? ¹ ÓÒ ´ ¸ ℄¸ ¸ ¸ ¸ ℄µº
  • 14. 14 Capítulo 1. Operaciones con listas Nota: La relación ÓÒ se corresponde con la definida ÔÔ Ò . 1.6. Lista inversa Ejercicio 1.6 Definir la relación ÒÚ Ö× ´·Ä½¸¹Ä¾µ que se verifique si ľ es la lista obtenida invirtiendo el orden de los elementos de la lista Ľ. Por ejemplo, ¹ ÒÚ Ö× ´ ¸ ¸ ℄¸Äµº Ä ¸ ¸ ℄ Solución: Vamos a presentar dos definiciones de ÒÚ Ö× ´Ä½¸Ä¾µ. Ambas son por recursión en Ľ. Primera solución: Usando la relación ÔÔ Ò , se define ÒÚ Ö× como ÒÚ Ö× ½´ ℄¸ ℄µº ÒÚ Ö× ½´ Ľ℄¸Ä¾µ ¹ ÒÚ Ö× ½´Ä½¸Ä¿µ¸ ÔÔ Ò ´Ä¿¸ ℄¸Ä¾µº Segunda solución: Usando un acumulador, se define ÒÚ Ö× como ÒÚ Ö× ¾´Ä½¸Ä¾µ ¹ ÒÚ Ö× ¾ ÙܴĽ¸Ä¾¸ ℄µº La relación ÒÚ Ö× ¾ ÙÜ´·Ä½¸¹Ä¾¸·Ä¿µ se verifica si ľ es la lista obtenida aña- diendo la inversa de Ľ a Ä¿ y se define por recursión en Ľ como sigue ÒÚ Ö× ¾ ÙÜ´ ℄¸Ä¾¸Ä¾µº ÒÚ Ö× ¾ ÙÜ´ Ľ℄¸Ä¾¸Ä¿µ ¹ ÒÚ Ö× ¾ ÙܴĽ¸Ä¾¸ Ä¿℄µº Nota: La relación ÒÚ Ö× se corresponde con la relación definida Ö Ú Ö× . 1.7. Palíndromo Ejercicio 1.7 Un palíndromo es una palabra que se lee igual en los dos sentidos, por ejemplo “oso”. Definir la relación Ô Ð Ò ÖÓÑÓ´·Äµ que se verifique si la lista Ä es un palíndromo. Por ejemplo,
  • 15. 1.8. Último elemento 15 ¹ Ô Ð Ò ÖÓÑÓ´ Ӹ׸Ó℄µº × ¹ Ô Ð Ò ÖÓÑÓ´ Ӹ׸ ℄µº ÆÓ Solución: La definición de Ô Ð Ò ÖÓÑÓ es Ô Ð Ò ÖÓÑӴĵ ¹ Ö Ú Ö× ´Ä¸Äµº 1.8. Último elemento Ejercicio 1.8 Definir la relación ÐØ ÑÓ´ ¸ ĵ que se verifique si es el último elemento de la lista Ä. Por ejemplo, ¹ ÐØ ÑÓ´ ¸ ¸ ¸ ¸ ℄µº ¹ ÐØ ÑÓ´ ¸Äµº Ä ℄ Ä ¸ ℄ Ä ¸ ¸ ℄ × Solución: Presentamos tres definiciones de ÐØ ÑÓ. Primera solución: Usando ÔÔ Ò se define ÐØ ÑÓ por ÐØ ÑÓ ½´ ¸Äµ ¹ ÔÔ Ò ´ ¸ ℄¸Äµº Segunda solución: Usando Ö Ú Ö× se define ÐØ ÑÓ por ÐØ ÑÓ ¾´ ¸Äµ ¹ Ö Ú Ö× ´Ä¸ ℄µº Tercera solución: Una definición de ÐØ ÑÓ´ ¸Äµ por recursión en Ä es ÐØ ÑÓ ¿´ ¸ ℄µº ÐØ ÑÓ ¿´ ¸ Ä℄µ ¹ ÐØ ÑÓ ¿´ ¸Äµº Nota: La relación ÐØ ÑÓ se corresponde con la relación definida Ð ×Ø.
  • 16. 16 Capítulo 1. Operaciones con listas 1.9. Penúltimo elemento Ejercicio 1.9 Definir lar relación Ô Ò ÐØ ÑÓ´ ¸ ĵ que se verifique si es el penúltimo ele- mento de la lista Ä. Por ejemplo, ¹ Ô Ò ÐØ ÑÓ´ ¸ ¸ ¸ ¸ ℄µº ¹ Ô Ò ÐØ ÑÓ´ ¸Äµº Ä ¸ ℄ Ä ¸ ¸ ℄ × Solución: Se presentan tres definiciones de Ô Ò ÐØ ÑÓ. Primera solución: Usando ÔÔ Ò se define Ô Ò ÐØ ÑÓ por Ô Ò ÐØ ÑÓ ½´ ¸Äµ ¹ ÔÔ Ò ´ ¸ ¸ ℄¸Äµº Segunda solución: Usando Ö Ú Ö× se define Ô Ò ÐØ ÑÓ por Ô Ò ÐØ ÑÓ ¾´ ¸Äµ ¹ Ö Ú Ö× ´Ä¸ ¸ ℄µº Tercera solución: Una definición de Ô Ò ÐØ ÑÓ´ ¸Äµ por recursión en Ä es Ô Ò ÐØ ÑÓ ¿´ ¸ ¸ ℄µº Ô Ò ÐØ ÑÓ ¿´ ¸ ¸ Ä℄µ ¹ Ô Ò ÐØ ÑÓ ¿´ ¸ Ä℄µº 1.10. Selección de un elemento Ejercicio 1.10 Definir la relación × Ð ÓÒ ´ ¸ Ľ¸ ľµ que se verifique si ľ es la lista obtenida eliminando una ocurrencia de en Ľ. Por ejemplo, ¹ × Ð ÓÒ ´ ¸ ¸ ¸ ℄¸Äµº Ä ¸ ℄ Ä ¸ ℄ ÆÓ ¹ × Ð ÓÒ ´ ¸ ¸ ¸ ℄¸Äµº ÆÓ ¹ × Ð ÓÒ ´ ¸Ä¸ ½¸¾℄µº
  • 17. 1.11. Inserción de un elemento en una lista 17 Ä ¸ ½¸ ¾℄ Ä ½¸ ¸ ¾℄ Ä ½¸ ¾¸ ℄ ÆÓ ¹ × Ð ÓÒ ´ ¸ ½¸¾¸¿℄¸ ½¸¿℄µº ¾ ÆÓ Solución: La definición de × Ð ÓÒ ´ ¸Ä½¸Ä¾µ, por recursión en Ľ, es × Ð ÓÒ ´ ¸ Ä℄¸Äµº × Ð ÓÒ ´ ¸ Ľ℄¸ ľ℄µ ¹ × Ð ÓÒ ´ ¸Ä½¸Ä¾µº Nota: La relación × Ð ÓÒ se corresponde con la definida × Ð Ø. 1.11. Inserción de un elemento en una lista Ejercicio 1.11 Definir la relación Ò× ÖØ ´ ¸ Ľ¸ ľµ que se verifique si ľ es una lista obtenida insertando en Ľ. Por ejemplo, ¹ Ò× ÖØ ´ ¸ ½¸¾℄¸Äµº Ä ¸ ½¸ ¾℄ Ä ½¸ ¸ ¾℄ Ä ½¸ ¾¸ ℄ ÆÓ Solución: La definición de Ò× ÖØ es Ò× ÖØ ´ ¸Ä½¸Ä¾µ ¹ × Ð Ø´ ¸Ä¾¸Ä½µº 1.12. Sublista Ejercicio 1.12 Definir la relación ×Ù Ð ×Ø ´ Ľ¸ ľµ que se verifique si Ľ es una sublista de ľ. Por ejemplo, ¹ ×Ù Ð ×Ø ´ ¸ ℄¸ ¸ ¸ ¸ ℄µº × ¹ ×Ù Ð ×Ø ´ ¸ ℄¸ ¸ ¸ ¸ ℄µº ÆÓ
  • 18. 18 Capítulo 1. Operaciones con listas ¹ ×Ù Ð ×Ø ´ ¸ ℄¸Äµº Ä ¸ ℄ Ä ¸ ¸ ℄ Ä ¸ ¸ ¸ ℄ × Solución: La definición de ×Ù Ð ×Ø es ×Ù Ð ×Ø ´Ä½¸Ä¾µ ¹ ÔÔ Ò ´ Ä¿¸Ä ¸Ä¾µ¸ ÔÔ Ò ´Ä½¸ Ä ¸Ä µº 1.13. Permutación Ejercicio 1.13 Definir la relación Ô ÖÑÙØ Ò´·Ä½¸ ľµ que se verifique si ľ es una per- mutación de Ľ. Por ejemplo, ¹ Ô ÖÑÙØ Ò´ ¸ ¸ ℄¸Äµº Ä ¸ ¸ ℄ Ä ¸ ¸ ℄ Ä ¸ ¸ ℄ Ä ¸ ¸ ℄ Ä ¸ ¸ ℄ Ä ¸ ¸ ℄ ÆÓ Solución: La definición de Ô ÖÑÙØ ҴĽ¸Ä¾µ, por recursión en Ľ es Ô ÖÑÙØ Ò´ ℄¸ ℄µº Ô ÖÑÙØ ҴĽ¸ ľ℄µ ¹ × Ð Ø´ ¸Ä½¸Ä¿µ¸ Ô ÖÑÙØ Ò´Ä¿¸Ä¾µº Nota: La relación Ô ÖÑÙØ ҴĽ¸Ä¾µ es equivalente a la definida Ô ÖÑÙØ Ø ÓҴľ¸Ä½µ. 1.14. Lista con todos sus elementos iguales Ejercicio 1.14 Definir la relación ØÓ Ó× Ù Ð ×´·Äµ que se verifique si todos los elementos de la lista Ä son iguales entre sí. Por ejemplo,
  • 19. 1.15. Paridad de la longitud de una lista 19 ¹ ØÓ Ó× Ù Ð ×´ ¸ ¸ ℄µº × ¹ ØÓ Ó× Ù Ð ×´ ¸ ¸ ℄µº ÆÓ ¹ ØÓ Ó× Ù Ð ×´ ℄µº × Solución: La definición de ØÓ Ó× Ù Ð × es ØÓ Ó× Ù Ð ×´ ℄µº ØÓ Ó× Ù Ð ×´ ℄µº ØÓ Ó× Ù Ð ×´ ¸ Ä℄µ ¹ ØÓ Ó× Ù Ð ×´ Ä℄µº 1.15. Paridad de la longitud de una lista Ejercicio 1.15 Definir la relación ÐÓÒ ØÙ Ô Ö´·Äµ que se verifique si la longitud de la lista Ä es par. Por ejemplo, ¹ ÐÓÒ ØÙ Ô Ö´ ¸ ℄µº × ¹ ÐÓÒ ØÙ Ô Ö´ ¸ ¸ ℄µº ÆÓ Solución: La definición de ÐÓÒ ØÙ Ô Ö, por recursión cruzada con la relación ÐÓÒ ØÙ ÑÔ Ö, es ÐÓÒ ØÙ Ô Ö´ ℄µº ÐÓÒ ØÙ Ô Ö´ Ä℄µ ¹ ÐÓÒ ØÙ ÑÔ Ö´Äµº La relación ÐÓÒ ØÙ ÑÔ Ö´·Äµ se verifica si la longitud de la lista Ä es impar. Por ejemplo, ¹ ÐÓÒ ØÙ ÑÔ Ö´ ¸ ℄µº ÆÓ ¹ ÐÓÒ ØÙ ÑÔ Ö´ ¸ ¸ ℄µº × La definición de ÐÓÒ ØÙ ÑÔ Ö es ÐÓÒ ØÙ ÑÔ Ö´ ℄µº ÐÓÒ ØÙ ÑÔ Ö´ Ä℄µ ¹ ÐÓÒ ØÙ Ô Ö´Äµº
  • 20. 20 Capítulo 1. Operaciones con listas 1.16. Rotación de un elemento Ejercicio 1.16 Definir la relación ÖÓØ ´ Ľ¸ ľµ que se verifique si ľ es la lista obtenida a partir de Ľ colocando su primer elemento al final. Por ejemplo, ¹ ÖÓØ ´ ¸ ¸ ¸ ℄¸Äµº Ä ¸ ¸ ¸ ℄ ¹ ÖÓØ ´Ä¸ ¸ ¸ ¸ ℄µº Ä ¸ ¸ ¸ ℄ Solución: La definición de ÖÓØ es ÖÓØ ´ Ľ℄¸Äµ ¹ ÔÔ Ò ´Ä½¸ ℄¸Äµº 1.17. Subconjunto Ejercicio 1.17 Definir la relación ×Ù ÓÒ ÙÒØÓ´·Ä½¸ ľµ que se verifique si ľ es un subcon- junto de Ľ. Por ejemplo, ¹ ×Ù ÓÒ ÙÒØÓ´ ¸ ¸ ¸ ℄¸ ¸ ℄µº × ¹ ×Ù ÓÒ ÙÒØÓ´ ¸ ¸ ¸ ℄¸ ¸ ℄µº ÆÓ ¹ ×Ù ÓÒ ÙÒØÓ´ ¸ ¸ ℄¸Äµº Ä ¸ ¸ ℄ Ä ¸ ℄ Ä ¸ ℄ Ä ℄ Ä ¸ ℄ Ä ℄ Ä ℄ Ä ℄ ÆÓ Solución: La definición de ×Ù ÓÒ ÙÒØÓ´Ä½¸Ä¾µ, por recursión en Ľ, es ×Ù ÓÒ ÙÒØÓ´ ℄¸ ℄µº ×Ù ÓÒ ÙÒØÓ´ Ľ℄¸ ľ℄µ ¹ ×Ù ÓÒ ÙÒØÓ´Ä½¸Ä¾µº ×Ù ÓÒ ÙÒØÓ´ Ľ℄¸Ä¾µ ¹ ×Ù ÓÒ ÙÒØÓ´Ä½¸Ä¾µº
  • 21. Capítulo 2 Aritmética 2.1. Máximo de dos números Ejercicio 2.1 Definir la relación Ñ Ü ÑÓ´· ¸· ¸ µ que se verifique si es el máximo de e . Por ejemplo, ¹ Ñ Ü ÑÓ´¾¸¿¸ µº ¿ ¹ Ñ Ü ÑÓ´¿¸¾¸ µº ¿ Solución: La definición de Ñ Ü ÑÓ es Ñ Ü ÑÓ´ ¸ ¸ µ ¹ º Ñ Ü ÑÓ´ ¸ ¸ µ ¹ º Nota: En Prolog está definida la función Ñ Ü´ ¸ µ que devuelve el máximo de e . Por ejemplo, ¹ × Ñ Ü´ ¸½¼µº ½¼ 2.2. Factorial Ejercicio 2.2 Definir la relación ØÓÖ Ð´· ¸ µ que se verifique si es el factorial de . Por ejemplo, ¹ ØÓÖ Ð´¿¸ µº 21
  • 22. 22 Capítulo 2. Aritmética Solución: La definición de ØÓÖ Ð´ ¸ µ, por recursión sobre , es ØÓÖ Ð´½¸½µº ØÓÖ Ð´ ¸ µ ¹ ½¸ ½ × ¹½¸ ØÓÖ Ð´ ½¸ ½µ¸ × ¶ ½º 2.3. Sucesión de Fibonacci Ejercicio 2.3 La sucesión de Fibonacci es 0,1,1,2,3,5,8,13,21,. . . en la que cada término, salvo los dos primeros, es la suma de los dos anteriores. Definir la relación ÓÒ ´·Æ¸¹ µ que se verifique si es el Æ–ésimo término de la sucesión de Fibonacci. Por ejemplo, ¹ ÓÒ ´ ¸ µº Solución: La definición de ÓÒ ´Æ¸ µ, por inducción en Æ, es ÓÒ ´¼¸¼µº ÓÒ ´½¸½µº ÓÒ ´Æ¸ µ ¹ Æ ½¸ ƽ × Æ¹½¸ ÓÒ ´Æ½¸ ½µ¸ ƾ × Æ¹¾¸ ÓÒ ´Æ¾¸ ¾µ¸ × ½· ¾º 2.4. Máximo común divisor Ejercicio 2.4 Definir la relación Ñ ´· ¸· ¸ µ que se verifique si es el máximo común divisor de e . Por ejemplo, ¹ Ñ ´½¼¸½ ¸ µº Solución: La definición de Ñ es
  • 23. 2.5. Longitud de una lista 23 Ñ ´ ¸ ¸ µº Ñ ´ ¸ ¸ µ ¹ ¸ ½ × ¹ ¸ Ñ ´ ¸ ½¸ µº Ñ ´ ¸ ¸ µ ¹ ¸ Ñ ´ ¸ ¸ µº 2.5. Longitud de una lista Ejercicio 2.5 Definir la relación ÐÓÒ ØÙ ´ ĸ Ƶ que se verifique si Æ es la longitud de la lista Ä. Por ejemplo ¹ ÐÓÒ ØÙ ´ ¸ ¸ ℄¸Æµº Æ ¿ ¹ ÐÓÒ ØÙ ´Ä¸¿µº Ä ¸ ¸ ℄ Solución: La definición de ÐÓÒ ØÙ es ÐÓÒ ØÙ ´ ℄¸¼µº ÐÓÒ ØÙ ´ Ä℄¸Æµ ¹ ÐÓÒ ØÙ ´Ä¸Æ½µ¸ Æ × Æ½ · ½º Nota: La relación ÐÓÒ ØÙ se corresponde con la relación definida Ð Ò Ø . 2.6. Lista de números acotada por su longitud Ejercicio 2.6 Una lista está acotada si todos sus elementos son menores que su longitud. Definir la relación Ð ×Ø ÓØ ´·Äµ que se verifique si todos los elementos de la lista de números Ä son menores que la longitud de Ä. Por ejemplo, ¹ Ð ×Ø ÓØ ´ ½¸¼¸¾℄µº × ¹ Ð ×Ø ÓØ ´ ½¸¿¸¾℄µº ÆÓ Solución: La definición de Ð ×Ø ÓØ es
  • 24. 24 Capítulo 2. Aritmética Ð ×Ø ÓØ ´Äµ ¹ Ð Ò Ø ´Ä¸Æµ¸ Ð ×Ø ÓØ ÙܴĸƵº donde Ð ×Ø ÓØ ÙÜ´·Ä¸·Æµ se verifica si todos los elementos de la lista de nú- meros Ä son menores que Æ. Por ejemplo, ¹ Ð ×Ø ÓØ ÙÜ´ ½¸ ¸¿℄¸ µº × ¹ Ð ×Ø ÓØ ÙÜ´ ½¸ ¸¿℄¸ µº ÆÓ y está definida por Ð ×Ø ÓØ ÙÜ´ ℄¸ µº Ð ×Ø ÓØ ÙÜ´ Ä℄¸Æµ ¹ Ƹ Ð ×Ø ÓØ ÙܴĸƵº 2.7. Máximo de una lista de números Ejercicio 2.7 Definir la relación Ñ Ü Ð ×Ø ´·Ä¸ µ que se verifique si es el máximo de la lista de números Ä. Por ejemplo, ¹ Ñ Ü Ð ×Ø ´ ½¸¿¸ ¸ ℄¸ µº Solución: La definición de Ñ Ü Ð ×Ø es Ñ Ü Ð ×Ø ´ ℄¸ µº Ñ Ü Ð ×Ø ´ ½¸ ¾ Ä℄¸ µ ¹ ¿ × Ñ Ü´ ½¸ ¾µ¸ Ñ Ü Ð ×Ø ´ ¿ Ä℄¸ µº 2.8. Suma de los elementos de una lista Ejercicio 2.8 Definir la relación ×ÙÑ Ð ×Ø ´·Ä¸ µ que se verifique si es la suma de los elementos de la lista de números Ä. Por ejemplo,
  • 25. 2.9. Lista de números ordenada 25 ¹ ×ÙÑ Ð ×Ø ´ ½¸¿¸ ℄¸ µº Solución: La definición de ×ÙÑ Ð ×Ø es ×ÙÑ Ð ×Ø ´ ℄¸¼µº ×ÙÑ Ð ×Ø ´ Ä℄¸ µ ¹ ×ÙÑ Ð ×Ø ´Ä¸ ½µ¸ × · ½º Nota: La relación ×ÙÑ Ð ×Ø se corresponde con la relación definida ×ÙÑÐ ×Ø. 2.9. Lista de números ordenada Ejercicio 2.9 Definir la relación ÓÖ Ò ´·Äµ que se verifique si la lista de números Ä está ordenada de manera creciente. Por ejemplo, ¹ ÓÖ Ò ´ ½¸¿¸¿¸ ℄µº × ¹ ÓÖ Ò ´ ½¸¿¸ ¸¾℄µº ÆÓ Solución: La definición de ÓÖ Ò es ÓÖ Ò ´ ℄µº ÓÖ Ò ´ ¸ Ä℄µ ¹ ¸ ÓÖ Ò ´ Ä℄µº 2.10. Suma parcial de una lista Ejercicio 2.10 Definir la relación ×ÙÑ Ô Ö Ð´·Ä½¸· ¸ ľµ que se verifique si ľ es un subconjunto de Ľ tal que la suma de sus elementos es . Por ejemplo, ¹ ×ÙÑ Ô Ö Ð´ ½¸¾¸ ¸¿¸¾℄¸ ¸Äµº Ä ½¸ ¾¸ ¾℄ Ä ¾¸ ¿℄ Ä ℄ Ä ¿¸ ¾℄ ÆÓ
  • 26. 26 Capítulo 2. Aritmética Solución: Se presentan dos definiciones de ×ÙÑ Ô Ö Ð. Primera solución: Una definición, usando ×Ù ÓÒ ÙÒØÓ (p. 20) y ×ÙÑ Ð ×Ø (p. 25), es ×ÙÑ Ô Ö Ð ½´Ä½¸ ¸Ä¾µ ¹ ×Ù ÓÒ ÙÒØÓ´Ä½¸Ä¾µ¸ ×ÙÑ Ð ×Ø ´Ä¾¸ µº Segunda solución: Una definición recursiva de ×ÙÑ Ô Ö Ð es ×ÙÑ Ô Ö Ð ¾´ ℄¸¼¸ ℄µº ×ÙÑ Ô Ö Ð ¾´ Ľ℄¸ ¸ ľ℄µ ¹ ¸ × ¹ ¸ ×ÙÑ Ô Ö Ð ¾´Ä½¸ ¸Ä¾µº ×ÙÑ Ô Ö Ð ¾´ Ľ℄¸ ¸Ä¾µ ¹ ×ÙÑ Ô Ö Ð ¾´Ä½¸ ¸Ä¾µº 2.11. Lista de Æ veces el número Æ Ejercicio 2.11 Definir la relación Ð ×Ø ´·Æ¸¹Äµ que se verifique si Ä es la lista de longitud Æ cuyos elementos son Æ. Por ejemplo, ¹ Ð ×Ø ´¿¸Äµº Ä ¿¸ ¿¸ ¿℄ Solución: La definición de Ð ×Ø es Ð ×Ø ´Æ¸Äµ ¹ Ð ×Ø ÙܴƸƸĵº donde Ð ×Ø ÙÜ´·Æ¸·Å¸¹Äµ se verifica si Ä es la lista de longitud Å cuyos elementos son Æ. Por ejemplo, ¹ Ð ×Ø ÙÜ´ ¸ ¸Äµº Ä ¸ ¸ ¸ ℄ y se define por Ð ×Ø ÙÜ´ ¸¼¸ ℄µº Ð ×Ø ÙܴƸŸ Æ Ä℄µ ¹ Å ¼¸ Ž × Å¹½¸ Ð ×Ø ÙܴƸޏĵº
  • 27. 2.12. Generación de lista de números 27 2.12. Generación de lista de números Ejercicio 2.12 Definir la relación Ð ×Ø Ò Ñ ÖÓ×´·Æ¸·Å¸¹Äµ que se verifica si L es la lista de los números desde N hasta M, ambos inclusive. Por ejemplo, ¹ Ð ×Ø Ò Ñ ÖÓ×´¿¸ ¸Äµº Ä ¿¸ ¸ ℄ ¹ Ð ×Ø Ò Ñ ÖÓ×´¿¸¾¸Äµº ÆÓ Solución: La definición de Ð ×Ø Ò Ñ ÖÓ× es Ð ×Ø Ò Ñ ÖÓ״ƸƸ Æ℄µº Ð ×Ø Ò Ñ ÖÓ״ƸŸ Æ Ä℄µ ¹ Æ Å¸ ƽ × Æ·½¸ Ð ×Ø Ò Ñ ÖÓ״ƽ¸Å¸Äµº Nota: La relación Ð ×Ø Ò Ñ ÖÓ× se corresponde con la definida ÒÙÑÐ ×Ø. 2.13. Intervalo entero Ejercicio 2.13 Definir la relación ÒØÖ ´·Æ½¸·Æ¾¸ µ que se verifique si es un número en- tero tal que ƽ ≤ ≤ ƾ. Por ejemplo, ¹ ÒØÖ ´¾¸ ¸ µº ¾ ¿ ÆÓ Solución: La definición de ÒØÖ es ÒØÖ ´Æ½¸Æ¾¸Æ½µ ¹ ƽ ƾº ÒØÖ ´Æ½¸Æ¾¸ µ ¹ ƽ ƾ¸ Æ¿ × Æ½·½¸ ÒØÖ ´Æ¿¸Æ¾¸ µº Nota: La relación ÒØÖ se corresponde con la definida ØÛ Ò.
  • 28. 28 Capítulo 2. Aritmética 2.14. K–ésimo elemento Ejercicio 2.14 Definir la relación Ð Ñ ÒØÓ Ò´·Ã¸ ĸ µ que se verifique si es el Öésimo elemento de la lista Ä (se empieza a numerar en 1). Por ejemplo, ¹ Ð Ñ ÒØÓ Ò´¾¸ ¸ ¸ ¸ ℄¸ µº ¹ Ð Ñ ÒØÓ Ò´¾¸Ä¸ µº Ä ¸ ℄ Solución: La definición de Ð Ñ ÒØÓ Ò es Ð Ñ ÒØÓ Ò´½¸ ℄¸ µº Ð Ñ ÒØÓ Ò´Ã¸ Ä℄¸ µ ¹ à ½¸ ý × Ã¹½¸ Ð Ñ ÒØÓ Ò´Ã½¸Ä¸ µº Nota: La relación Ð Ñ ÒØÓ Ò se corresponde con la relación definida ÒØ ½. 2.15. Multiplicación de las ocurrencias de los elementos de una lista Ejercicio 2.15 Definir la relación ÑÙÐØ ÔÐ ´·Ä½¸·Æ¸¹Ä¾µ que se verifica si ľ es la lista obtenida repitiendo Æ veces los elementos de la lista Ľ. Por ejemplo, ¹ ÑÙÐØ ÔÐ ´ ¸ ¸ ℄¸¿¸Äµº Ä ¸ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ℄ Solución: La definición de ÑÙÐØ ÔÐ es ÑÙÐØ ÔÐ ´Ä½¸Æ¸Ä¾µ ¹ ÑÙÐØ ÔÐ ÙܴĽ¸Æ¸Æ¸Ä¾µº donde ÑÙÐØ ÔÐ ÙÜ´·Ä½¸·Ã¸·Æ¸¹Ä¾µ se verifica si ľ es la lista obtenida repitien- do à veces el primer elemento de Ľ y Æ veces los restantes elementos. Por ejemplo, ¹ ÑÙÐØ ÔÐ ÙÜ´ ¸ ¸ ℄¸¾¸¿¸Äµº Ä ¸ ¸ ¸ ¸ ¸ ¸ ¸ ℄ Su definición es
  • 29. 2.15. Multiplicación de las ocurrencias de los elementos de una lista 29 ÑÙÐØ ÔÐ ÙÜ´ ℄¸ ¸ ¸ ℄µº ÑÙÐØ ÔÐ ÙÜ´ Ľ℄¸¼¸Æ¸Ä¾µ ¹ ÑÙÐØ ÔÐ ÙܴĽ¸Æ¸Æ¸Ä¾µº ÑÙÐØ ÔÐ ÙÜ´ Ľ℄¸Ã¸Æ¸ ľ℄µ ¹ à ¼¸ ý × Ã¹½¸ ÑÙÐØ ÔÐ ÙÜ´ Ľ℄¸Ã½¸Æ¸Ä¾µº
  • 30. 30 Capítulo 2. Aritmética
  • 31. Capítulo 3 Estructuras 3.1. Segmentos como objetos estructurados Ejercicio 3.1 Supongamos que representamos los puntos del plano mediante términos de la for- ma ÔÙÒØÓ´ ¸ µ donde e son números, y los segmentos del plano mediante términos de la forma × Ñ ÒØÓ´È½¸È¾µ donde Ƚ 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 ´½¸½µ y ´½¸¾µ? 2. ¿Es vertical el segmento que une los puntos ´½¸½µ y ´¾¸¾µ? 3. ¿Hay algún tal que el segmento que une los puntos ´½¸½µ y ´¾¸ µ sea vertical? 4. ¿Hay algún tal que el segmento que une los puntos ´½¸¾µ y ´ ¸¿µ sea vertical? 5. ¿Hay algún tal que el segmento que une los puntos ´½¸½µ y ´¾¸ µ sea horizontal? 31
  • 32. 32 Capítulo 3. Estructuras 6. ¿Para qué puntos el segmento que comienza en ´¾¸¿µ es vertical? 7. ¿Hay algún segmento que sea horizontal y vertical? Solución: Las definiciones de Ú ÖØ Ð y ÓÖ ÞÓÒØ Ð son Ú ÖØ Ð´× ´ÔÙÒØÓ´ ¸ µ¸ÔÙÒØÓ´ ¸ ½µµµº ÓÖ ÞÓÒØ Ð´× ´ÔÙÒØÓ´ ¸ µ¸ÔÙÒØÓ´ ½¸ µµµº Las respuestas a las preguntas son 1. ¿Es vertical el segmento que une los puntos ´½¸½µ y ´½¸¾µ? ¹ Ú ÖØ Ð´× ´ÔÙÒØÓ´½¸½µ¸ÔÙÒØÓ´½¸¾µµµº × 2. ¿Es vertical el segmento que une los puntos ´½¸½µ y ´¾¸¾µ? ¹ Ú ÖØ Ð´× ´ÔÙÒØÓ´½¸½µ¸ÔÙÒØÓ´¾¸¾µµµº ÆÓ 3. ¿Hay algún tal que el segmento que une los puntos ´½¸½µ y ´¾¸ µ sea vertical? ¹ Ú ÖØ Ð´× ´ÔÙÒØÓ´½¸½µ¸ÔÙÒØÓ´¾¸ µµµº ÆÓ 4. ¿Hay algún tal que el segmento que une los puntos ´½¸¾µ y ´ ¸¿µ sea vertical? ¹ Ú ÖØ Ð´× ´ÔÙÒØÓ´½¸¾µ¸ÔÙÒØÓ´ ¸¿µµµº ½ ÆÓ 5. ¿Hay algún tal que el segmento que une los puntos ´½¸½µ y ´¾¸ µ sea horizontal? ¹ ÓÖ ÞÓÒØ Ð´× ´ÔÙÒØÓ´½¸½µ¸ÔÙÒØÓ´¾¸ µµµº ½ ÆÓ 6. ¿Para qué puntos el segmento que comienza en ´¾¸¿µ es vertical? ¹ Ú ÖØ Ð´× ´ÔÙÒØÓ´¾¸¿µ¸Èµµº È ÔÙÒØÓ´¾¸ µ ÆÓ 7. ¿Hay algún segmento que sea horizontal y vertical?
  • 33. 3.2. Base de datos familiar 33 ¹ Ú ÖØ д˵¸ ÓÖ ÞÓÒØ д˵º Ë × ´ÔÙÒØÓ´ ¸ µ¸ ÔÙÒØÓ´ ¸ µµ ÆÓ ¹ Ú ÖØ д µ¸ ÓÖ ÞÓÒØ д µº × 3.2. Base de datos familiar Ejercicio 3.2 En este ejercicio vamos a trabajar con una base de datos familiar. 1. Representar la información relativa a las siguientes familias: En la primera familia, • el padre es Tomás García Pérez, nacido el 7 de Mayo de 1960, trabaja de profesor y gana 60 euros diarios; • la madre es Ana López Ruiz, nacida el 10 de marzo de 1962, trabaja de médica y gana 90 euros diarios; • el hijo es Juan García López, nacido el 5 de Enero de 1980, estudiante; • la hija es María García López, nacida el 12 de Abril de 1992, estudiante. En la segunda familia, • el padre es José Pérez Ruiz, nacido el 6 de Marzo de 1963, trabaja de pintor y gana 120 euros diarios; • la madre es Luisa Gálvez Pérez, nacida el 12 de Mayo de 1964, trabaja de médica y gana 90 euros diarios; • un hijo es Juan Luis Pérez Pérez, nacido el 5 de Febrero de 1990, estudiante; • una hija es María José Pérez Pérez, nacida el 12 de Junio de 1992, estudiante; • otro hijo es José María Pérez Pérez, 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 relación × Ó´ µ que se verifique si es un hombre casado.
  • 34. 34 Capítulo 3. Estructuras 5. Preguntar por los hombres casados. 6. Definir la relación × ´ µ 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 relación Ó´ µ que se verifique si figura en alguna lista de hijos. 10. Preguntar por los hijos. 11. Definir la relación Ô Ö×ÓÒ ´ µ que se verifique si es una persona existente en la base de datos. 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. 14. Definir la relación Ò Ñ ÒØÓ´ ¸ µ de forma que si es una persona, enton- ces es su fecha de nacimiento. 15. Buscar todos los hijos nacidos en 1992. 16. Definir la relación ×Ù Ð Ó´ ¸ µ 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 dia- rios. 18. Definir la relación ØÓØ Ð´Ä¸ µ de forma que si Ä es una lista de personas, entonces es la suma de los sueldos de las personas de la lista Ä. 19. Calcular los ingresos totales de cada familia. Solución: Solución del apartado 1: La representación de la información sobre las dos familias es Ñ Ð ´Ô Ö×ÓÒ ´ ØÓÑ ×¸ Ö ¸Ô Ö Þ℄¸ ´ ¸Ñ ÝÓ¸½ ¼µ¸ ØÖ Ó´ÔÖÓ ×ÓÖ¸ ¼µµ¸ Ô Ö×ÓÒ ´ Ò ¸ÐÓÔ Þ¸ÖÙ Þ℄¸ ´½¼¸Ñ ÖÞÓ¸½ ¾µ¸ ØÖ Ó´Ñ ¸ ¼µµ¸ Ô Ö×ÓÒ ´ Ù Ò¸ Ö ¸ÐÓÔ Þ℄¸ ´ ¸ Ò ÖÓ¸½ ¼µ¸ ×ØÙ ÒØ µ¸
  • 35. 3.2. Base de datos familiar 35 Ô Ö×ÓÒ ´ Ñ Ö ¸ Ö ¸ÐÓÔ Þ℄¸ ´½¾¸ Ö Ð¸½ ¾µ¸ ×ØÙ ÒØ µ ℄µº Ñ Ð ´Ô Ö×ÓÒ ´ Ó× ¸Ô Ö Þ¸ÖÙ Þ℄¸ ´ ¸Ñ ÖÞÓ¸½ ¿µ¸ ØÖ Ó´Ô ÒØÓÖ¸½¾¼µµ¸ Ô Ö×ÓÒ ´ ÐÙ × ¸ ÐÚ Þ¸Ô Ö Þ℄¸ ´½¾¸Ñ ÝÓ¸½ µ¸ ØÖ Ó´Ñ ¸ ¼µµ¸ Ô Ö×ÓÒ ´ Ù Ò ÐÙ ×¸Ô Ö Þ¸Ô Ö Þ℄¸ ´ ¸ Ö ÖÓ¸½ ¼µ¸ ×ØÙ ÒØ µ¸ Ô Ö×ÓÒ ´ Ñ Ö Ó× ¸Ô Ö Þ¸Ô Ö Þ℄¸ ´½¾¸ ÙÒ Ó¸½ ¾µ¸ ×ØÙ ÒØ µ¸ Ô Ö×ÓÒ ´ Ó× Ñ Ö ¸Ô Ö Þ¸Ô Ö Þ℄¸ ´½¾¸ ÙÐ Ó¸½ µ¸ ×ØÙ ÒØ µ ℄µº Solución del apartado 2: Las consultas, y sus respuestas son, ¹ Ñ Ð ´ ¸ ¸ ℄µº ÆÓ ¹ Ñ Ð ´ ¸ ¸ ℄µº ÆÓ ¹ Ñ Ð ´ ¸ ¸ ¸ ℄µº × ¹ Ñ Ð ´ ¸ ¸ ¸ ¸ ℄µº × ¹ Ñ Ð ´ ¸ ¸ ¸ ¸ ¸ ℄µº ÆÓ Solución del apartado 3: ¹ Ñ Ð ´Ô Ö×ÓÒ ´ÆÈ¸ ¸ µ¸ ¸ ¸ ¸ ℄µº ÆÈ Ó× ¸ Ô Ö Þ¸ ÖÙ Þ℄ ÆÓ Solución del apartado 4: × Ó´ µ ¹ Ñ Ð ´ ¸ ¸ µº
  • 36. 36 Capítulo 3. Estructuras Solución del apartado 5: ¹ × Ó´ µº Ô Ö×ÓÒ ´ ØÓÑ ×¸ Ö ¸ Ô Ö Þ℄¸ ´ ¸ Ñ ÝÓ¸ ½ ¼µ¸ ØÖ Ó´ÔÖÓ ×ÓÖ¸ ¼µµ Ô Ö×ÓÒ ´ Ó× ¸ Ô Ö Þ¸ ÖÙ Þ℄¸ ´ ¸ Ñ ÖÞÓ¸ ½ ¿µ¸ ØÖ Ó´Ô ÒØÓÖ¸ ½¾¼µµ ÆÓ Solución del apartado 6: × ´ µ ¹ Ñ Ð ´ ¸ ¸ µº Solución del apartado 7: ¹ × ´ µº Ô Ö×ÓÒ ´ Ò ¸ ÐÓÔ Þ¸ ÖÙ Þ℄¸ ´½¼¸ Ñ ÖÞÓ¸ ½ ¾µ¸ ØÖ Ó´Ñ ¸ ¼µµ Ô Ö×ÓÒ ´ ÐÙ × ¸ ÐÚ Þ¸ Ô Ö Þ℄¸ ´½¾¸ Ñ ÝÓ¸ ½ µ¸ ØÖ Ó´Ñ ¸ ¼µµ ÆÓ Solución del apartado 8: ¹ × ´Ô Ö×ÓÒ ´ Ƹ ¸ ℄¸ ¸ØÖ Ó´ ¸ µµµº Æ Ò Æ ÐÙ × ÆÓ Solución del apartado 9: Ó´ µ ¹ Ñ Ð ´ ¸ ¸Äµ¸ Ñ Ñ Ö´ ¸Äµº Solución del apartado 10:
  • 37. 3.2. Base de datos familiar 37 ¹ Ó´ µº Ô Ö×ÓÒ ´ Ù Ò¸ Ö ¸ÐÓÔ Þ℄¸ ´ ¸ Ò ÖÓ¸½ ¼µ¸ ×ØÙ ÒØ µ Ô Ö×ÓÒ ´ Ñ Ö ¸ Ö ¸ÐÓÔ Þ℄¸ ´½¾¸ Ö Ð¸½ ¾µ¸ ×ØÙ ÒØ µ Ô Ö×ÓÒ ´ Ù Ò ÐÙ ×¸Ô Ö Þ¸Ô Ö Þ℄¸ ´ ¸ Ö ÖÓ¸½ ¼µ¸ ×ØÙ ÒØ µ Ô Ö×ÓÒ ´ Ñ Ö Ó× ¸Ô Ö Þ¸Ô Ö Þ℄¸ ´½¾¸ ÙÒ Ó¸½ ¾µ¸ ×ØÙ ÒØ µ Ô Ö×ÓÒ ´ Ó× Ñ Ö ¸Ô Ö Þ¸Ô Ö Þ℄¸ ´½¾¸ ÙÐ Ó¸½ µ¸ ×ØÙ ÒØ µ ÆÓ Solución del apartado 11: Ô Ö×ÓÒ ´ µ ¹ × Ó´ µ × ´ µ Ó´ µº Solución del apartado 12: ¹ Ô Ö×ÓÒ ´Ô Ö×ÓÒ ´ ¸ ¸ µµº ØÓÑ ×¸ Ö ¸ Ô Ö Þ℄ Ó× ¸ Ô Ö Þ¸ ÖÙ Þ℄ Ò ¸ ÐÓÔ Þ¸ ÖÙ Þ℄ ÐÙ × ¸ ÐÚ Þ¸ Ô Ö Þ℄ Ù Ò¸ Ö ¸ ÐÓÔ Þ℄ Ñ Ö ¸ Ö ¸ ÐÓÔ Þ℄ Ù Ò Ð٠׸ Ô Ö Þ¸ Ô Ö Þ℄ Ñ Ö Ó× ¸ Ô Ö Þ¸ Ô Ö Þ℄ Ó× Ñ Ö ¸ Ô Ö Þ¸ Ô Ö Þ℄ ÆÓ Solución del apartado 13: ¹ Ô Ö×ÓÒ ´Ô Ö×ÓÒ ´ ¸ ´ ¸ ¸ Óµ¸ ×ØÙ ÒØ µµ¸ Ó ½ ¿º Ù Ò¸ Ö ¸ ÐÓÔ Þ℄ Ó ½ ¼ Ñ Ö ¸ Ö ¸ ÐÓÔ Þ℄ Ó ½ ¾ Ù Ò Ð٠׸ Ô Ö Þ¸ Ô Ö Þ℄ Ó ½ ¼ Ñ Ö Ó× ¸ Ô Ö Þ¸ Ô Ö Þ℄ Ó ½ ¾ ÆÓ Solución del apartado 14:
  • 38. 38 Capítulo 3. Estructuras Ò Ñ ÒØÓ´Ô Ö×ÓÒ ´ ¸ ¸ µ¸ µº Solución del apartado 15: ¹ Ó´ µ¸ Ò Ñ ÒØÓ´ ¸ ´ ¸ ¸½ ¾µµº Ô Ö×ÓÒ ´ Ñ Ö Ó× ¸Ô Ö Þ¸Ô Ö Þ℄¸ ´½¾¸ ÙÒ Ó¸½ ¾µ¸ ×ØÙ ÒØ µ ÆÓ Solución del apartado 16: ×Ù Ð Ó´Ô Ö×ÓÒ ´ ¸ ¸ØÖ Ó´ ¸ µµ¸ µº ×Ù Ð Ó´Ô Ö×ÓÒ ´ ¸ ¸ ×ØÙ ÒØ µ¸¼µº Solución del apartado 17: ¹ Ô Ö×ÓÒ ´ µ¸ Ò Ñ ÒØÓ´ ¸ ´ ¸ ¸ Óµµ¸ Ó ½ ¸ ×Ù Ð Ó´ ¸ µ¸ ¾º Ô Ö×ÓÒ ´ Ó× ¸ Ô Ö Þ¸ ÖÙ Þ℄¸ ´ ¸ Ñ ÖÞÓ¸ ½ ¿µ¸ ØÖ Ó´Ô ÒØÓÖ¸ ½¾¼µµ Ó ½ ¿ ½¾¼ Ô Ö×ÓÒ ´ Ò ¸ ÐÓÔ Þ¸ ÖÙ Þ℄¸ ´½¼¸ Ñ ÖÞÓ¸ ½ ¾µ¸ ØÖ Ó´Ñ ¸ ¼µµ Ó ½ ¾ ¼ ÆÓ Solución del apartado 18: ØÓØ Ð´ ℄¸¼µº ØÓØ Ð´ Ä℄¸ µ ¹ ×Ù Ð Ó´ ¸ ½µ¸ ØÓØ Ð´Ä¸ ¾µ¸ × ½ · ¾º Solución del apartado 19:
  • 39. 3.3. Autómata no–determinista 39 ¹ Ñ Ð ´ ¸ ¸ µ¸ØÓØ Ð´ ¸ ℄¸ÌÓØ еº Ô Ö×ÓÒ ´ ØÓÑ ×¸ Ö ¸Ô Ö Þ℄¸ ´ ¸Ñ ÝÓ¸½ ¼µ¸ ØÖ Ó´ÔÖÓ ×ÓÖ¸ ¼µµ Ô Ö×ÓÒ ´ Ò ¸ÐÓÔ Þ¸ÖÙ Þ℄¸ ´½¼¸Ñ ÖÞÓ¸½ ¾µ¸ ØÖ Ó´Ñ ¸ ¼µµ Ô Ö×ÓÒ ´ Ù Ò¸ Ö ¸ÐÓÔ Þ℄¸ ´ ¸ Ò ÖÓ¸½ ¼µ¸ ×ØÙ ÒØ µ¸ Ô Ö×ÓÒ ´ Ñ Ö ¸ Ö ¸ÐÓÔ Þ℄¸ ´½¾¸ Ö Ð¸½ ¾µ¸ ×ØÙ ÒØ µ℄ ÌÓØ Ð ½ ¼ Ô Ö×ÓÒ ´ Ó× ¸Ô Ö Þ¸ÖÙ Þ℄¸ ´ ¸Ñ ÖÞÓ¸½ ¿µ¸ ØÖ Ó´Ô ÒØÓÖ¸½¾¼µµ Ô Ö×ÓÒ ´ ÐÙ × ¸ ÐÚ Þ¸Ô Ö Þ℄¸ ´½¾¸Ñ ÝÓ¸½ µ¸ ØÖ Ó´Ñ ¸ ¼µµ Ô Ö×ÓÒ ´ Ù Ò ÐÙ ×¸Ô Ö Þ¸Ô Ö Þ℄¸ ´ ¸ Ö ÖÓ¸½ ¼µ¸ ×ØÙ ÒØ µ¸ Ô Ö×ÓÒ ´ Ñ Ö Ó× ¸Ô Ö Þ¸Ô Ö Þ℄¸ ´½¾¸ ÙÒ Ó¸½ ¾µ¸ ×ØÙ ÒØ µ Ô Ö×ÓÒ ´ Ó× Ñ Ö ¸Ô Ö Þ¸Ô Ö Þ℄¸ ´½¾¸ ÙÐ Ó¸½ µ¸ ×ØÙ ÒØ µ℄ ÌÓØ Ð ¾½¼ ÆÓ 3.3. Autómata no–determinista Ejercicio 3.3 Consideremos el autómata representado por
  • 40. 40 Capítulo 3. Estructuras b e1 a a e2 b e3e4 b siendo ¿ el estado final. 1. Representar el autómata utilizando las siguientes relaciones Ò Ð´ µ que se verifica si es el estado final. ØÖ Ò×´ ½¸ ¸ ¾µ que se verifica si se puede pasar del estado ½ al estado ¾ usando la letra . ÒÙÐÓ´ ½¸ ¾µ que se verifica si se puede pasar del estado ½ al estado ¾ mediante un movimiento nulo. 2. Definir la relación ÔØ ´ ¸Äµ que se verifique si el autómata, a partir del estado , acepta la lista Ä. Por ejemplo, ¹ ÔØ ´ ½¸ ¸ ¸ ¸ ℄µº × ¹ ÔØ ´ ¾¸ ¸ ¸ ¸ ℄µº ÆÓ 3. Determinar si el autómata acepta la lista ¸ ¸ ¸ ℄. 4. Determinar los estados a partir de los cuales el autómata acepta la lista ¸ ℄. 5. Determinar las palabras de longitud 3 aceptadas por el autómata a partir del estado ½. 6. Definir la relación ÔØ ÓØ ½´ ¸Ä¸Æµ que se verifique si el autómata, a partir del estado , acepta la lista Ä y la longitud de Ä es Æ.
  • 41. 3.3. Autómata no–determinista 41 7. Buscar las cadenas aceptadas a partir de ½ con longitud 3. 8. Definir la relación ÔØ ÓØ ¾´ ¸Ä¸Æµ que se verifique si el autómata, a partir del estado , acepta la lista Ä y la longitud de Ä es menor o igual que Æ. 9. Buscar las cadenas aceptadas a partir de ½ con longitud menor o igual 3. Solución: Solución del apartado 1: Ò Ð´ ¿µº ØÖ Ò×´ ½¸ ¸ ½µº ØÖ Ò×´ ½¸ ¸ ¾µº ØÖ Ò×´ ½¸ ¸ ½µº ØÖ Ò×´ ¾¸ ¸ ¿µº ØÖ Ò×´ ¿¸ ¸ µº ÒÙÐÓ´ ¾¸ µº ÒÙÐÓ´ ¿¸ ½µº Solución del apartado 2: ÔØ ´ ¸ ℄µ ¹ Ò Ð´ µº ÔØ ´ ¸ Ä℄µ ¹ ØÖ Ò×´ ¸ ¸ ½µ¸ ÔØ ´ ½¸Äµº ÔØ ´ ¸Äµ ¹ ÒÙÐÓ´ ¸ ½µ¸ ÔØ ´ ½¸Äµº Solución del apartado 3: ¹ ÔØ ´ ½¸ ¸ ¸ ¸ ℄µº × Solución del apartado 4: ¹ ÔØ ´ ¸ ¸ ℄µº ½ ¿ ÆÓ Solución del apartado 5:
  • 42. 42 Capítulo 3. Estructuras ¹ ÔØ ´ ½¸ ¸ ¸ ℄µº ÆÓ Solución del apartado 6: Presentamos dos definiciones. La primera usando ÔØ ÔØ ÓØ ½ ´ ¸Ä¸Æµ ¹ Ð Ò Ø ´Ä¸Æµ¸ ÔØ ´ ¸Äµº La segunda definición es una variación de la definición de acepta: ÔØ ÓØ ½ ´ ¸ ℄¸¼µ ¹ Ò Ð´ µº ÔØ ÓØ ½ ´ ¸ Ä℄¸Æµ ¹ Æ ¼¸ ØÖ Ò×´ ¸ ¸ ½µ¸ Å × Æ ¹ ½¸ ÔØ ÓØ ½ ´ ½¸Ä¸Åµº ÔØ ÓØ ½ ´ ¸Ä¸Æµ ¹ ÒÙÐÓ´ ¸ ½µ¸ ÔØ ÓØ ½ ´ ½¸Ä¸Æµº Nota: La primera definición es más simple y eficiente que la segunda como se ob- serva en el siguiente ejemplo ¹ Ø Ñ ´ ÔØ ÓØ ½ ´ ¾¸ ĸ ¼¼¼µµº ± ½¼¸¼¾ Ò Ö Ò ×¸ ¼º¼½ ÈÍ Ò ¼º¼½ × ÓÒ × ´½¾ ± È͸ ½¼¼¾ ¼¼ Ä Ô×µ ¹ Ø Ñ ´ ÔØ ÓØ ½ ´ ¾¸ ĸ ¼¼¼µµº ± ¾¼¸¼¿ Ò Ö Ò ×¸ ¼º¼¾ ÈÍ Ò ¼º¼¾ × ÓÒ × ´½¾ ± È͸ ½¼¼½ ¼ Ä Ô×µ A partir de ahora, adoptaremos la definición ÔØ ÓØ ½ ÔØ ÓØ ½´ ¸Ä¸Åµ ¹ ÔØ ÓØ ½ ´ ¸Ä¸Åµº Solución del apartado 7:
  • 43. 3.3. Autómata no–determinista 43 ¹ ÔØ ÓØ ½´ ½¸Ä¸¿µº Ä ¸ ¸ ℄ Ä ¸ ¸ ℄ ÆÓ Solución del apartado 8: Presentamos dos definiciones. La primera usando ÔØ ÔØ ÓØ ¾ ´ ¸Ä¸Æµ ¹ ØÛ Ò´¼¸Æ¸Åµ¸ Ð Ò Ø ´Ä¸Åµ¸ ÔØ ´ ¸Äµº y la segunda modificando ÔØ ÔØ ÓØ ¾ ´ ¸ ℄¸ Ƶ ¹ Ò Ð´ µº ÔØ ÓØ ¾ ´ ¸ Ä℄¸Æµ ¹ Æ ¼¸ ØÖ Ò×´ ¸ ¸ ½µ¸ Å × Æ¹½¸ ÔØ ÓØ ¾ ´ ½¸Ä¸Åµº ÔØ ÓØ ¾ ´ ¸Ä¸Æµ ¹ Æ ¼¸ ÒÙÐÓ´ ¸ ½µ¸ ÔØ ÓØ ¾ ´ ½¸Ä¸Æµº Nota: La primera definición es más simple y eficiente que la segunda como se ob- serva en el siguiente ejemplo ¹ Ø Ñ ´ ÔØ ÓØ ¾ ´ ½¸ ĸ½¼¼¼¼µµº ± Ò Ö Ò ×¸ ¼º¼¼ ÈÍ Ò ¼º¼¼ × ÓÒ × ´¼± È͸ ÁÒ Ò Ø Ä Ô×µ ¹ Ø Ñ ´ ÔØ ÓØ ¾ ´ ½¸ ĸ½¼¼¼¼µµº ± ¼¸¼¾ Ò Ö Ò ×¸ ¼º¼ ÈÍ Ò ¼º¼ × ÓÒ × ´½½¿± È͸ ½ ½ Ä Ô×µ A partir de ahora, adoptaremos la definición ÔØ ÓØ ¾ ÔØ ÓØ ¾´ ¸Ä¸Åµ ¹ ÔØ ÓØ ¾ ´ ¸Ä¸Åµº Solución del apartado 9: ¹ ÔØ ÓØ ¾´ ½¸Ä¸¿µº Ä ¸ ¸ ℄ Ä ¸ ℄ Ä ¸ ¸ ℄ ÆÓ
  • 44. 44 Capítulo 3. Estructuras 3.4. El problema del mono y el plátano Ejercicio 3.4 Un mono se encuentra en la puerta de una habitación. En el centro de la habitación hay un plátano colgado del techo. El mono está hambriento y desea coger el plátano, pero no lo alcanza desde el suelo. En la ventana de la habitación hay una silla que el mono puede usar. El mono puede realizar las siguientes acciones: pasear de un lugar a otro de la habitación, empujar la silla de un lugar a otro de la habitación (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 plátano (si está encima de la silla en el centro de la habitación). Definir la relación ×ÓÐÙ Ò´ ¸Ëµ que se verifique si Ë es una sucesión de acciones que aplicadas al estado permiten al mono coger el plátano. Por ejemplo, ¹ ×ÓÐÙ Ò´ ר Ó´ÔÙ ÖØ ¸×Ù ÐÓ¸Ú ÒØ Ò ¸× Òµ¸Äµº Ä Ô × Ö´ÔÙ ÖØ ¸Ú ÒØ Ò µ¸ ÑÔÙ Ö´Ú ÒØ Ò ¸ ÒØÖÓµ¸×Ù Ö¸ Ó Ö℄ donde ר Ó´ÈŸ ŸÈ˸ µ significa que el mono se encuentra en la posición ÈÅ (puerta, centro o ventana) encima de Å (suelo o silla), la silla se encuentra en la posición ÈË (puerta, centro o ventana) y el mono tiene ( = ÓÒ) o no ( = × Ò) el plátano. Solución: ×ÓÐÙ Ò´ ר Ó´ ¸ ¸ ¸ ÓÒµ¸ ℄µº ×ÓÐÙ Ò´ ½¸ Ä℄µ ¹ ÑÓÚ Ñ ÒØÓ´ ½¸ ¸ ¾µ¸ ×ÓÐÙ Ò´ ¾¸Äµº La relación ÑÓÚ Ñ ÒØÓ´ ר Ó´ÈŽ¸ ޏÈ˽¸ ½µ¸ ¸ ר Ó´Èž¸ ž¸È˾¸ ¾µµ se ve- rifica si en el ר Ó´ÈŽ¸ ޏÈ˽¸ ½µ se puede aplicar la acción y como resultado de su aplicación se pasa al ר Ó´Èž¸ ž¸È˾¸ ¾µ. ÑÓÚ Ñ ÒØÓ´ ר Ó´ ÒØÖÓ¸× ÐÐ ¸ ÒØÖÓ¸× Òµ¸ Ó Ö¸ ר Ó´ ÒØÖÓ¸× ÐÐ ¸ ÒØÖÓ¸ ÓÒµµº ÑÓÚ Ñ ÒØÓ´ ר Ó´ ¸×Ù ÐÓ¸ ¸Íµ¸ ×Ù Ö¸ ר Ó´ ¸× ÐÐ ¸ ¸Íµµº ÑÓÚ Ñ ÒØÓ´ ר Ó´ ½¸×Ù ÐÓ¸ ½¸Íµ¸ ÑÔÙ Ö´ ½¸ ¾µ¸ ר Ó´ ¾¸×Ù ÐÓ¸ ¾¸Íµµº ÑÓÚ Ñ ÒØÓ´ ר Ó´ ¸×Ù ÐÓ¸ ¸Íµ¸ Ô × Ö´ ¸ µ¸ ר Ó´ ¸×Ù ÐÓ¸ ¸Íµµº
  • 45. 3.5. Movimientos del caballo del ajedrez 45 3.5. Movimientos del caballo del ajedrez Ejercicio 3.5 Supongamos que los cuadros del tablero de ajedrez los representamos por pares de números ¸ ℄ con e entre ½ y . 1. Definir la relación × ÐØ ´· ½¸ ¾µ que se verifica si el caballo puede pasar en un movi- miento del cuadrado ½ al cuadrado ¾. Por ejemplo, ¹ × ÐØ ´ ½¸½℄¸Ëµº Ë ¿¸¾℄ Ë ¾¸¿℄ ÆÓ 2. Definir la relación Ñ ÒӴĵ que se verifique si Ä es una lista de cuadrados representando el camino recorrido por un caballo sobre un tablero vacío. Por ejemplo, ¹ Ñ ÒÓ´ ½¸½℄¸ ℄µº ¿¸¾℄ ¾¸¿℄ ÆÓ 3. Usando la relación Ñ ÒÓ, 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 número de movimientos necesarios para desplazar el caballo del cuadro ½¸½℄ al ¾¸¾℄. ¿Cuántos caminos de dicha longitud hay de [1,1] a [2,2]? Solución: Solución del apartado 1: × ÐØ ´ ¸ ℄¸ ½¸ ½℄µ ¹ ÜÝ´ ܸ ݵ¸ ½ × · ܸ ÓÖÖ ØÓ´ ½µ¸ ½ × · ݸ ÓÖÖ ØÓ´ ½µº La relación ÜÝ´ ¸ µ se verifica si un caballo puede moverse espacios horizon- tales e verticales. ÜÝ´¾¸½µº ÜÝ´¾¸¹½µº ÜÝ´¹¾¸½µº ÜÝ´¹¾¸¹½µº
  • 46. 46 Capítulo 3. Estructuras ÜÝ´½¸¾µº ÜÝ´½¸¹¾µº ÜÝ´¹½¸¾µº ÜÝ´¹½¸¹¾µº La relación ÓÖÖ ØÓ´· µ se verifica si está entre 1 y 8. ÓÖÖ ØÓ´ µ ¹ ½ ¸ º Solución del apartado 2: Ñ ÒÓ´ ℄µº Ñ ÒÓ´ ½¸ ¾ Ä℄µ ¹ × ÐØ ´ ½¸ ¾µ¸ Ñ ÒÓ´ ¾ Ä℄µº Solución del apartado 3: ¹ Ñ ÒÓ´ ¾¸½℄¸ ½¸ ¸ ℄¸ ¾¸ ¸ ℄℄µº ½ ¸ ¾℄ ¾ ¸ ℄ ½ ¸ ¾℄ ¾ ¸ ℄ ½ ¸ ¾℄ ¾ ¸ ℄ ½ ¸ ¾℄ ¾ ¸ ℄ ¿ ½ ¿¸ ¿℄ ¾ ¸ ℄ ½ ¿¸ ¿℄ ¾ ¸ ℄ ½ ¿¸ ¿℄ ¾ ¸ ℄ ½ ¿¸ ¿℄ ¾ ¸ ℄ ¿ ÆÓ Solución del apartado 4: ¹ Ñ ÒÓ´ ½¸½℄¸ ¸ ¾¸¾℄℄µº ÆÓ ¹ Ñ ÒÓ´ ½¸½℄¸ ¸ ¸ ¾¸¾℄℄µº ÆÓ ¹ Ñ ÒÓ´ ½¸½℄¸ ¸ ¸ ¸ ¾¸¾℄℄µº × ¹ Ñ ÒÓ´ ½¸½℄¸ ¾¸ ¿¸ ¸ ¾¸¾℄℄µº ¾ ¿¸ ¾℄ ¿ ¸ ¿℄ ¿¸ ℄ ¾ ¿¸ ¾℄ ¿ ¸ ¿℄ ¸ ½℄
  • 47. 3.6. Máximo elemento de un árbol binario 47 ¾ ¿¸ ¾℄ ¿ ¸ ½℄ ¸ ¿℄ ¾ ¿¸ ¾℄ ¿ ½¸ ¿℄ ¿¸ ℄ ¾ ¿¸ ¾℄ ¿ ¾¸ ℄ ¸ ¿℄ ¾ ¾¸ ¿℄ ¿ ¸ ¾℄ ¿¸ ℄ ¾ ¾¸ ¿℄ ¿ ¿¸ ℄ ½¸ ℄ ¾ ¾¸ ¿℄ ¿ ¿¸ ℄ ¸ ¿℄ ¾ ¾¸ ¿℄ ¿ ¿¸ ½℄ ¸ ¿℄ ¾ ¾¸ ¿℄ ¿ ½¸ ℄ ¿¸ ℄ ÆÓ 3.6. Máximo elemento de un árbol binario Ejercicio 3.6 Un árbol binario es vacío o consta de tres partes: la raíz (que debe de ser un número positivo), el subárbol izquierdo (que debe ser un árbol binario) y el subárbol derecho (que debe ser un árbol binario). Usaremos la siguiente representación Ò Ð representa el árbol vacío Ø´Á¸Ê¸ µ representa el árbol de la raíz Ê, subárbol izquierdo Á y subárbol derecho . Por ejemplo, Ø´Ø´Ò Ð¸¾¸Ò е¸½¸Ø´Ø´Ò и ¸Ò е¸¿¸Ò еµ representa el árbol ½ » ¾ ¿ » Definir la relación Ñ Ü ÑÓ´·Ì¸¹ µ que se verifique si es el máximo de los nodos del árbol Ì. Por ejemplo, ¹ Ñ Ü ÑÓ´Ò Ð¸Æµº Æ ¼ ¹ Ñ Ü ÑÓ´Ø´Ò Ð¸¾¸Ò е¸Æµº Æ ¾ ¹ Ñ Ü ÑÓ´Ø´Ø´Ò Ð¸¾¸Ò е¸¿¸Ò е¸Æµº Æ ¿ Solución: La definición de Ñ Ü ÑÓ es Ñ Ü ÑÓ´Ò Ð¸¼µº Ñ Ü ÑÓ´Ø´Á¸Ê¸ µ¸Åµ ¹ Ñ Ü ÑÓ´Á¸ÅÁµ¸
  • 48. 48 Capítulo 3. Estructuras Ñ Ü ÑÓ´ ¸Å µ¸ Ž × Ñ Ü´ÅÁ¸Å µ¸ Å × Ñ Ü´Ê¸Å½µº
  • 49. Capítulo 4 Retroceso, corte y negación 4.1. Ejemplos de uso del corte Ejercicio 4.1 1. Definir la relación ´ ¸ µ de forma que: si < ¿, entonces = ¼; si ¿ ≤ < , entonces = ¾; si ≤ , entonces = . 2. Construir el árbol de deducción correspondiente a la cuestión ¹ ´½¸ µ¸ ¾ º 3. Definir la relación ½´ ¸ µ a partir de la definición de ´ ¸ µ, introduciendo un corte al final de las dos primeras cláusulas. 4. Construir el árbol de deducción correspondiente a la cuestión ¹ ½´½¸ µ¸ ¾ º 5. Construir el árbol de deducción correspondiente a la cuestión ¹ ½´ ¸ µº 6. En el árbol anterior se observa que se efectúan comparaciones innecesarias (por ejemplo, después de fallar la comparación ¿, efectúa la comparación ¿ ). Definir la relación ¾´ ¸ µ suprimiendo en la definición de ½´ ¸ µ las comparaciones innecesarias. 7. Construir el árbol de deducción correspondiente a la cuestión ¹ ¾´ ¸ µº 49
  • 50. 50 Capítulo 4. Retroceso, corte y negación 8. Construir el árbol de deducción correspondiente a la cuestión ¹ ¾´½¸ µ¸ ¾ º 9. Definir la relación ¿´ ¸ µ a partir de la definición de ¾´ ¸ µ, suprimiendo los cortes. 10. Obtener las respuestas correspondientes a la cuestión ¹ ¿´½¸ µº Solución: Solución del apartado 1: La definición de es ´ ¸¼µ ¹ ¿º ´ ¸¾µ ¹ ¿ ¸ º ´ ¸ µ ¹ º Solución del apartado 2: El árbol de deducción se muestra en la figura 4.1 (página 50). 1<3, 2<0 3 =< 1, 1<6, 2<2 6 =< 1, 2<4 f(1,Y), 2<Y {X/1, Y/2} {X/1, Y/0} {X/1, Y/4} 2<0 Fallo Fallo Fallo Figura 4.1: Árbol de resolución del apartado 2 Solución del apartado 3: La definición de ½ es ½´ ¸¼µ ¹ ¿¸ º ½´ ¸¾µ ¹ ¿ ¸ ¸ º ½´ ¸ µ ¹ º Solución del apartado 4: El árbol de deducción se muestra en la figura 4.2 (página 51). Solución del apartado 5: El árbol de deducción se muestra en la figura 4.3 (página 51). Solución del apartado 6: La definición de ¾ es
  • 51. 4.1. Ejemplos de uso del corte 51 {X/1, Y/0} 1<3, !, 2<0 !, 2<0 2<0 Fallo f_1(1,Y), 2<Y Figura 4.2: Árbol de resolución del apartado 4 3 =< 7, 7<6, ! 6 =< 77<3, ! Exito {Y/4} f_1(7,Y) {X/7, Y/2} {X/7, Y/0} {X/7, Y/4} Fallo 7<6, ! Fallo Figura 4.3: Árbol de resolución del apartado 5
  • 52. 52 Capítulo 4. Retroceso, corte y negación ¾´ ¸¼µ ¹ ¿¸ º ¾´ ¸¾µ ¹ ¸ º ¾´ ¸ µº Solución del apartado 7: El árbol de deducción se muestra en la figura 4.4 (página 52). 7<3, ! Exito {Y/4} f_1(7,Y) {X/7, Y/2} {X/7, Y/0} {X/7, Y/4} Fallo 7<6, ! Fallo Figura 4.4: Árbol de resolución del apartado 7 Solución del apartado 8: El árbol de deducción se muestra en la figura 4.5 (página 52). {X/1, Y/0} 1<3, !, 2<0 !, 2<0 2<0 Fallo f_2(1,Y), 2<Y Figura 4.5: Árbol de resolución del apartado 8 Solución del apartado 9: La definición de ¿ es
  • 53. 4.2. Árboles de deducción de Ñ Ñ Ö 53 ¿´ ¸¼µ ¹ ¿º ¿´ ¸¾µ ¹ º ¿´ ¸ µº Solución del apartado 10: Las respuestas son ¹ ¿´½¸ µº ¼ ¾ ÆÓ 4.2. Árboles de deducción de Ñ Ñ Ö Ejercicio 4.2 La relación Ñ Ñ Ö está definida por Ñ Ñ Ö ´ ¸ ℄µ ¹ º Ñ Ñ Ö ´ ¸ Ä℄µ ¹ Ñ Ñ Ö ´ ¸Äµº Escribir los árboles de SLD resolución correspondientes a las siguientes preguntas 1. ¹ Ñ Ñ Ö ´ ¸ ¸ ¸ ℄µ¸ º 2. ¹ Ñ Ñ Ö ´ ¸ ¸ ¸ ℄µ¸ º 3. ¹ ¸ Ñ Ñ Ö ´ ¸ ¸ ¸ ℄µº Solución: 4.3. Diferencia de conjuntos Ejercicio 4.3 Definir la relación Ö Ò ´· ½¸· ¾¸¹ ¿µ que se verifique si ¿ es la dife- rencia de los conjuntos ½ y ¾. Por ejemplo, ¹ Ö Ò ´ ¸ ℄¸ ¸ ℄¸ µº ℄ ÆÓ Definir una versión con negación ( Ö Ò ½) y otra con corte ( Ö Ò ¾) y comparar la eficiencia de las distintas definiciones con el ejemplo ¹ ÒÙÑÐ ×Ø´½¸½¼¼¼¸ Ľµ¸ Ø Ñ ´ Ö Ò ½´ Ľ¸ Ľµµº ¹ ÒÙÑÐ ×Ø´½¸½¼¼¼¸ Ľµ¸ Ø Ñ ´ Ö Ò ¾´ Ľ¸ Ľµµº
  • 54. 54 Capítulo 4. Retroceso, corte y negación ! Resp.: X=b {X/a} !, a=a. a=a Resp.: X=a memberchk(X,[a,b,c]), X=a. memberchk(X,[a,b,c]), X=b. {X/a} !, a=b. a=b Fallo X=b, memberchk(X,[a,b,c]). {X/b} memberchk(b,[a,b,c]). memberchk(b,[b,c]). Figura 4.6: Árbol de resolución Ñ Ñ Ö Nota: La relación Ö Ò se corresponde con la relación definida ×Ù ØÖ Ø. Solución: 1a definición (con negación): Ö Ò ½´ ℄¸ ¸ ℄µº Ö Ò ½´ Ä℄¸Ä¾¸Ä¿µ ¹ Ñ Ñ Ö´ ¸Ä¾µ¸ Ö Ò ½´Ä¸Ä¾¸Ä¿µº Ö Ò ½´ Ä℄¸Ä¾¸ Ä¿℄µ ¹ ÒÓØ´Ñ Ñ Ö´ ¸Ä¾µµ¸ Ö Ò ½´Ä¸Ä¾¸Ä¿µº 2a definición (con corte): Ö Ò ¾´ ℄¸ ¸ ℄µº Ö Ò ¾´ Ä℄¸Ä¾¸Ä¿µ ¹ Ñ Ñ Ö´ ¸Ä¾µ¸ ¸ Ö Ò ¾´Ä¸Ä¾¸Ä¿µº Ö Ò ¾´ Ä℄¸Ä¾¸ Ä¿℄µ ¹ ± ÒÓØ´Ñ Ñ Ö´ ¸Ä¾µµ¸ Ö Ò ¾´Ä¸Ä¾¸Ä¿µº 3a definición (con corte y memberchk):
  • 55. 4.4. Agregación de un elemento a un conjunto 55 Ö Ò ¿´ ℄¸ ¸ ℄µº Ö Ò ¿´ Ä℄¸Ä¾¸Ä¿µ ¹ Ñ Ñ Ö ´ ¸Ä¾µ¸ ¸ Ö Ò ¿´Ä¸Ä¾¸Ä¿µº Ö Ò ¿´ Ä℄¸Ä¾¸ Ä¿℄µ ¹ ± ÒÓØ´Ñ Ñ Ö ´ ¸Ä¾µµ¸ Ö Ò ¿´Ä¸Ä¾¸Ä¿µº Comparaciones: ¹ ÒÙÑÐ ×Ø´½¸½¼¼¼¸ Ľµ¸ Ø Ñ ´ Ö Ò ½´ Ľ¸ Ľ¸ ℄µµº ± ¼½¸ ¼½ Ò Ö Ò ×¸ ¼¸¾ ÈÍ Ò ¼¸¾ × ÓÒ × ´ ± È͸ ¾¼ Ä Ô×µ ¹ ÒÙÑÐ ×Ø´½¸½¼¼¼¸ Ľµ¸ Ø Ñ ´ Ö Ò ¾´ Ľ¸ Ľ¸ ℄µµº ± ¼½¸ ¼½ Ò Ö Ò ×¸ ¼¸¾ ÈÍ Ò ¼¸¾ × ÓÒ × ´ ± È͸ ¾¼¼ ¼¼ Ä Ô×µ ¹ ÒÙÑÐ ×Ø´½¸½¼¼¼¸ Ľµ¸ Ø Ñ ´ Ö Ò ¿´ Ľ¸ Ľ¸ ℄µµº ± ¾¸¼¼½ Ò Ö Ò ×¸ ¼¸¼ ÈÍ Ò ¼¸¼ × ÓÒ × ´ ± È͸ ¾ Ä Ô×µ ¹ ÒÙÑÐ ×Ø´½¸½¼¼¼¸ Ľµ¸ Ø Ñ ´×Ù ØÖ Ø´ Ľ¸ Ľ¸ ℄µµº ± ¾¸¼¼½ Ò Ö Ò ×¸ ¼¸¼ ÈÍ Ò ¼¸¼ × ÓÒ × ´½¼ ± È͸ ¾ ¼½¾ Ä Ô×µ 4.4. Agregación de un elemento a un conjunto Ejercicio 4.4 Definir la relación Ö Ö´· ¸·Ä¸¹Ä½µ que se verifique si Ľ es la lista obtenida añadiéndole a Ä, si no pertenece a Ä y es Ä en caso contrario. Por ejemplo, ¹ Ö Ö´ ¸ ¸ ℄¸Äµº Ä ¸ ¸ ℄ ¹ Ö Ö´ ¸ ¸ ℄¸Äµº Ä ¸ ℄ Hacer una versión con negación y otra con corte. Solución: 1a definición (con negación): Ö Ö ½´ ¸Ä¸Äµ ¹ Ñ Ñ Ö´ ¸Äµº Ö Ö ½´ ¸Ä¸ Ä℄µ ¹ ÒÓØ´Ñ Ñ Ö´ ¸Äµµº 2a definición (con corte): Ö Ö ¾´ ¸Ä¸Äµ ¹ Ñ Ñ Ö´ ¸Äµ¸ º Ö Ö ¾´ ¸Ä¸ Ä℄µº
  • 56. 56 Capítulo 4. Retroceso, corte y negación 4.5. Separación de una lista de números en positivos y ne- gativos Ejercicio 4.5 Definir la relación × Ô Ö ´·Ä½¸·Ä¾¸¹Ä¿µ que separa la lista de números Ľ en dos listas: ľ formada por los números positivos y Ä¿ formada por los números negativos o cero. Por ejemplo, ¹ × Ô Ö ´ ¾¸¼¸¹¿¸ ¸¼¸¾℄¸Ä¾¸Ä¿µº ľ ¾¸ ¸ ¾℄ Ä¿ ¼¸ ¹¿¸ ¼℄ × Proponer dos soluciones, una sin corte y otra con corte. Solución: Definición con negación: × Ô Ö ½´ ℄¸ ℄¸ ℄µº × Ô Ö ½´ Æ ÊĽ℄¸ Æ Êľ℄¸Ä¿µ ¹ Æ ¼¸ × Ô Ö ½´ÊĽ¸Êľ¸Ä¿µº × Ô Ö ½´ Æ ÊĽ℄¸Ä¾¸ Æ ÊÄ¿℄µ ¹ Æ ¼¸ × Ô Ö ½´ÊĽ¸Ä¾¸ÊÄ¿µº Definición con corte: × Ô Ö ¾´ ℄¸ ℄¸ ℄µº × Ô Ö ¾´ Æ ÊĽ℄¸ Æ Êľ℄¸Ä¿µ ¹ Æ ¼¸ ¸ × Ô Ö ¾´ÊĽ¸Êľ¸Ä¿µº × Ô Ö ¾´ Æ ÊĽ℄¸Ä¾¸ Æ ÊÄ¿℄µ ¹ ± Æ ¼¸ × Ô Ö ¾´ÊĽ¸Ä¾¸ÊÄ¿µº 4.6. Suma de los números pares de una lista de números Ejercicio 4.6 Definir la relación ×ÙÑ Ô Ö ×´·Ä¸¹Æµ que se verifica si Æ es la suma de todos los números pares de la lista de números Ä. Por ejemplo, ¹ ×ÙÑ Ô Ö ×´ ¾¸¿¸ ℄¸Æµº Æ ¹ ×ÙÑ Ô Ö ×´ ½¸¿¸ ¸ ¸ ¸½½¸¾ ℄¸Æµº Æ ¿¼
  • 57. 4.6. Suma de los números pares de una lista de números 57 Hacer una versión con negación y otra con corte. Solución: Versión 1 (con negación): ×ÙÑ Ô Ö × ½´ ℄¸¼µº ×ÙÑ Ô Ö × ½´ Æ Ä℄¸ µ ¹ Ô Ö´Æµ¸ ×ÙÑ Ô Ö × ½´Ä¸ ½µ¸ × ½ · ƺ ×ÙÑ Ô Ö × ½´ Æ Ä℄¸ µ ¹ ÒÓØ´Ô Ö´ Ƶµ¸ ×ÙÑ Ô Ö × ½´Ä¸ µº Ô Ö´Æµ ¹ Æ ÑÓ ¾ ¼º Versión 2 (con corte): ×ÙÑ Ô Ö × ¾´ ℄¸¼µº ×ÙÑ Ô Ö × ¾´ Æ Ä℄¸ µ ¹ Ô Ö´Æµ¸ ¸ ×ÙÑ Ô Ö × ¾´Ä¸ ½µ¸ × ½ · ƺ ×ÙÑ Ô Ö × ¾´ Æ Ä℄¸ µ ¹ ± ÒÓØ´Ô Ö´ Ƶµ¸ ×ÙÑ Ô Ö × ¾´Ä¸ µº Versión 3 (con corte y acumulador): ×ÙÑ Ô Ö × ¿´Ä¸ µ ¹ ×ÙÑ Ô Ö × ¿ Ùܴĸ¼¸ µº ×ÙÑ Ô Ö × ¿ ÙÜ´ ℄¸ ¸ µº ×ÙÑ Ô Ö × ¿ ÙÜ´ Æ Ä℄¸ ¸ µ ¹ Ô Ö´Æµ¸ ¸ ½ × · Ƹ ×ÙÑ Ô Ö × ¿ Ùܴĸ ½¸ µº ×ÙÑ Ô Ö × ¿ ÙÜ´ Æ Ä℄¸ ¸ µ ¹ ± ÒÓØ´Ô Ö´ Ƶµ¸ ×ÙÑ Ô Ö × ¿ Ùܴĸ ¸ µº
  • 58. 58 Capítulo 4. Retroceso, corte y negación 4.7. Exponente de dos en la factorización de un número Ejercicio 4.7 Definir la relación ÜÔÓÒ ÒØ Ó×´·Æ¸¹ µ que se verifica si es el exponen- te de 2 en la descomposición de Æ como producto de factores primos. Por ejemplo, ¹ ÜÔÓÒ ÒØ Ó×´ ¼¸ µº ¿ ¹ ÜÔÓÒ ÒØ Ó×´ ¸ µº ¼ Hacer una versión con negación y otra con corte. Solución: 1a Versión (con negación): ÜÔÓÒ ÒØ Ó× ½´Æ¸ µ ¹ Æ ÑÓ ¾ ¼¸ ƽ × Æ » ¾¸ ÜÔÓÒ ÒØ Ó× ½´Æ½¸ ½µ¸ × ½ · ½º ÜÔÓÒ ÒØ Ó× ½´Æ¸¼µ ¹ Æ ÑÓ ¾ ¼º 2a Versión (con corte): ÜÔÓÒ ÒØ Ó× ¾´Æ¸ µ ¹ Æ ÑÓ ¾ ¼¸ ¸ ƽ × Æ » ¾¸ ÜÔÓÒ ÒØ Ó× ¾´Æ½¸ ½µ¸ × ½ · ½º ÜÔÓÒ ÒØ Ó× ¾´ ¸¼µº 4.8. Transformación de lista a conjunto Ejercicio 4.8 Definir la relación Ð ×Ø ÓÒ ÙÒØÓ´·Ä¸¹ µ que se verifique si es el conjun- to correspondiente a la lista Ä (es decir, contiene los mismos elementos que Ä en el mismo orden, pero si Ä tiene elementos repetidos sólo se incluye en la última aparición de cada elemento). Por ejemplo, ¹ Ð ×Ø ÓÒ ÙÒØÓ´ ¸ ¸ ¸ ℄¸ µº ¸ ¸ ℄ Nota: La relación Ð ×Ø ÓÒ ÙÒØÓ se corresponde con la relación definida Ð ×Ø ØÓ × Ø.
  • 59. 4.8. Transformación de lista a conjunto 59 Solución: La definición de Ð ×Ø ÓÒ ÙÒØÓ es Ð ×Ø ÓÒ ÙÒØÓ´ ℄¸ ℄µº Ð ×Ø ÓÒ ÙÒØÓ´ Ä℄¸ µ ¹ Ñ Ñ Ö´ ¸Äµ¸ Ð ×Ø ÓÒ ÙÒØÓ´Ä¸ µº Ð ×Ø ÓÒ ÙÒØÓ´ Ä℄¸ ℄µ ¹ · Ñ Ñ Ö´ ¸Äµ¸ Ð ×Ø ÓÒ ÙÒØÓ´Ä¸ µº La definición anterior puede simplificarse con cortes Ð ×Ø ÓÒ ÙÒØÓ ½´ ℄¸ ℄µº Ð ×Ø ÓÒ ÙÒØÓ ½´ Ä℄¸ µ ¹ Ñ Ñ Ö´ ¸Äµ¸ ¸ Ð ×Ø ÓÒ ÙÒØÓ ½´Ä¸ µº Ð ×Ø ÓÒ ÙÒØÓ ½´ Ä℄¸ ℄µ ¹ ± · Ñ Ñ Ö´ ¸Äµ¸ Ð ×Ø ÓÒ ÙÒØÓ ½´Ä¸ µº 3a definición (con corte y memberchk): Ð ×Ø ÓÒ ÙÒØÓ ¿´ ℄¸ ℄µº Ð ×Ø ÓÒ ÙÒØÓ ¿´ Ä℄¸Ä¾µ ¹ Ñ Ñ Ö ´ ¸Äµ¸ ¸ Ð ×Ø ÓÒ ÙÒØÓ ¿´Ä¸Ä¾µº Ð ×Ø ÓÒ ÙÒØÓ ¿´ Ä℄¸ ľ℄µ ¹ ± ÒÓØ´Ñ Ñ Ö´ ¸Äµµ¸ Ð ×Ø ÓÒ ÙÒØÓ ¿´Ä¸Ä¾µº Comparaciones: ¹ ÒÙÑÐ ×Ø´½¸½¼¼¼¸ Ľµ¸ Ø Ñ ´Ð ר ÓÒ ÙÒØÓ ½´ Ľ¸ оµµº ± ½¸¼¼¿¸¼¼½ Ò Ö Ò ×¸ ¼¸ ¼ ÈÍ Ò ¼¸ ½ × ÓÒ × ´ ± È͸ ¾ ¼ ¼¿ Ä Ô×µ ¹ ÒÙÑÐ ×Ø´½¸½¼¼¼¸ Ľµ¸ Ø Ñ ´Ð ר ÓÒ ÙÒØÓ ¾´ Ľ¸ оµµº ± ¼½¸ ¼½ Ò Ö Ò ×¸ ¼¸¾ ÈÍ Ò ¼¸¾ × ÓÒ × ´ ¿± È͸ ½ ¾ ¼ Ä Ô×µ ¹ ÒÙÑÐ ×Ø´½¸½¼¼¼¸ Ľµ¸ Ø Ñ ´Ð ר ÓÒ ÙÒØÓ ¿´ Ľ¸ оµµº ± ¿¸¼¼½ Ò Ö Ò ×¸ ¼¸¼ ÈÍ Ò ¼¸¼ × ÓÒ × ´ ¼± È͸ ¾ ½ Ä Ô×µ ¹ ÒÙÑÐ ×Ø´½¸½¼¼¼¸ Ľµ¸ Ø Ñ ´Ð ר ØÓ × Ø´ Ľ¸ оµµº ± ¿¸¼¼ Ò Ö Ò ×¸ ¼¸¼ ÈÍ Ò ¼¸¼ × ÓÒ × ´ ¿± È͸ ¾ ½ Ä Ô×µ
  • 60. 60 Capítulo 4. Retroceso, corte y negación 4.9. Signos de crecimientos de sucesiones numéricas Ejercicio 4.9 Definir la relación Ö Ñ ÒØÓ×´·Ä½¸¹Ä¾µ que se verifique si ľ es la lista correspondientes a los crecimientos de la lista numérica Ľ; es decir, entre cada par de elementos consecutivos e de Ľ coloca el signo · si e y signo ¹ en caso contrario. Por ejemplo, ¹ Ö Ñ ÒØÓ×´ ½¸¿¸¾¸¾¸ ¸¿℄¸Äµº Ä ½¸ ·¸ ¿¸ ¹¸ ¾¸ ¹¸ ¾¸ ·¸ ¸ ¹℄ Dar una definición sin corte y otra con corte. Solución: La definición de Ö Ñ ÒØÓ× sin usar corte es Ö Ñ ÒØÓ× ½´ ℄¸ ℄µº Ö Ñ ÒØÓ× ½´ ¸ Ľ℄¸ ¸· ľ℄µ ¹ ¸ Ö Ñ ÒØÓ× ½´ Ľ℄¸Ä¾µº Ö Ñ ÒØÓ× ½´ ¸ Ľ℄¸ ¸¹ ľ℄µ ¹ ¸ Ö Ñ ÒØÓ× ½´ Ľ℄¸Ä¾µº La definición de Ö Ñ ÒØÓ× usando corte es Ö Ñ ÒØÓ× ¾´ ℄¸ ℄µº Ö Ñ ÒØÓ× ¾´ ¸ Ľ℄¸ ¸· ľ℄µ ¹ ¸ ¸ Ö Ñ ÒØÓ× ¾´ Ľ℄¸Ä¾µº Ö Ñ ÒØÓ× ¾´ ¸ Ľ℄¸ ¸¹ ľ℄µ ¹ ± ¸ Ö Ñ ÒØÓ× ¾´ Ľ℄¸Ä¾µº 4.10. Descomposición 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, ¹ Ñ ÒÓÖ Ú ×ÓÖ ÔÖÓÔ Ó´¿¼¸ µº ¾ ¹ Ñ ÒÓÖ Ú ×ÓÖ ÔÖÓÔ Ó´¿¸ µº ¿
  • 61. 4.11. Menor elemento que cumple una propiedad 61 ØÓÖ Þ Ò´·Æ¸¹Äµ que se verifique si Ä es la lista correspondiente a la descomposi- ción del número Æ en factores primos (se considera los que elementos de Ä están ordenados de manera creciente). Por ejemplo, ¹ ØÓÖ Þ Ò´½¾¸Äµº Ä ¾¸ ¾¸ ¿℄ ÆÓ ¹ ØÓÖ Þ Ò´½¸Äµº Ä ℄ ÆÓ Solución: La definición de Ñ ÒÓÖ Ú ×ÓÖ ÔÖÓÔ Ó es Ñ ÒÓÖ Ú ×ÓÖ ÔÖÓÔ Ó´Æ¸ µ ¹ ƽ × ÐÓÓÖ´×ÕÖØ´Æµµ¸ ØÛ Ò´¾¸Æ½¸ µ¸ Æ ÑÓ ¼¸ º Ñ ÒÓÖ Ú ×ÓÖ ÔÖÓÔ Ó´Æ¸Æµº La definición de ØÓÖ Þ Ò es ØÓÖ Þ Ò´½¸ ℄µº ØÓÖ Þ Ò´Æ¸ Ä℄µ ¹ Æ ½¸ Ñ ÒÓÖ Ú ×ÓÖ ÔÖÓÔ Ó´Æ¸ µ¸ ƽ × Æ» ¸ ØÓÖ Þ Ò´Æ½¸Äµº 4.11. Menor elemento que cumple una propiedad Ejercicio 4.11 Definir la relación Ð ÙÐ ´·Æ¸·Å¸ µ que se verifique si es el menor múlti- plo de Æ tal que la suma de sus dígitos es mayor que Å. Por ejemplo, ¹ Ð ÙÐ ´¿¸½¼¸ µº ¿ × ¹ Ð ÙÐ ´ ¸¾¼¸ µº ¿ × Solución: La definición de Ð ÙÐ es
  • 62. 62 Capítulo 4. Retroceso, corte y negación Ð ÙÐ ´Æ¸Å¸ µ ¹ Ñ ÐØ ÔÐӴƸ µ¸ ×ÙÑ ØÓ×´ ¸Æ½µ¸ ƽ Ÿ º La relación Ñ ÐØ ÔÐÓ´·Æ¸¹ µ se verifica si es un múltiplo de Æ. Por ejemplo, ¹ Ñ ÐØ ÔÐÓ´ ¸ µº ½¼ ½ × Ñ ÐØ ÔÐӴƸƵº Ñ ÐØ ÔÐӴƸŵ ¹ Ñ ÐØ ÔÐӴƸƽµ¸ Å × Æ·Æ½º La relación ×ÙÑ ØÓ×´·Æ¸¹Ëµ se verifica si Ë es la suma de los dígitos del nú- mero Æ. Por ejemplo, ¹ ×ÙÑ ØÓ×´¾¿ ¸Ëµº Ë ½¾ ×ÙÑ ØÓ״ƸƵ ¹ Æ ½¼¸ º ×ÙÑ ØÓ״Ƹ˵ ¹ ± Æ ½¼¸ ƽ × Æ »» ½¼¸ Ê × Æ ¹ ½¼¶Æ½¸ ×ÙÑ ØÓ״ƽ¸Ë½µ¸ Ë × Ë½ · ʺ 4.12. Números libres de cuadrados Ejercicio 4.12 Un número es libre de cuadrados si no es divisible por el cuadrado de ningún nú- mero mayor que 1. Definir la relación Ð Ö Ù Ö Ó×´·Æµ que se verifique si el número Æ es libre de cuadrados. Por ejemplo,
  • 63. 4.13. Suma de los números libres de cuadrados 63 ¹ Ð Ö Ù Ö Ó×´¿¼µº × ¹ Ð Ö Ù Ö Ó×´½¾µº ÆÓ Solución: La definición de Ð Ö Ù Ö Ó× es Ð Ö Ù Ö Ó״Ƶ ¹ Å × ÐÓÓÖ´×ÕÖØ´Æµµ¸ ÒÓØ´´ ØÛ Ò´¾¸Å¸ µ¸ Æ ÑÓ ´ ¶ µ ¼µµº 4.13. Suma de los números libres de cuadrados Ejercicio 4.13 Definir la relación ×ÙÑ Ð Ö × Ù Ö Ó×´·Ä¸¹Ëµ que se verifique si Ë es la suma de los números libres de cuadrados la lista numérica Ä. Por ejemplo, ¹ ×ÙÑ Ð Ö × Ù Ö Ó×´ ¸½¾¸½ ¸¿¼℄¸Ëµº Ë ¿ Nota: Dar dos definiciones, una con negación y otra con corte. Solución: La definición de ×ÙÑ Ð Ö × Ù Ö Ó× usando la negación es ×ÙÑ Ð Ö × Ù Ö Ó× ½´ ℄¸¼µº ×ÙÑ Ð Ö × Ù Ö Ó× ½´ Ä℄¸Ëµ ¹ Ð Ö Ù Ö Ó×´ µ¸ ×ÙÑ Ð Ö × Ù Ö Ó× ½´Ä¸Ë½µ¸ Ë × ·Ë½º ×ÙÑ Ð Ö × Ù Ö Ó× ½´ Ä℄¸Ëµ ¹ ÒÓØ´Ð Ö Ù Ö Ó×´ µµ¸ ×ÙÑ Ð Ö × Ù Ö Ó× ½´Ä¸Ëµº y la definición usando corte es ×ÙÑ Ð Ö × Ù Ö Ó× ¾´ ℄¸¼µº ×ÙÑ Ð Ö × Ù Ö Ó× ¾´ Ä℄¸Ëµ ¹ Ð Ö Ù Ö Ó×´ µ¸ ¸ ×ÙÑ Ð Ö × Ù Ö Ó× ¾´Ä¸Ë½µ¸ Ë × ·Ë½º ×ÙÑ Ð Ö × Ù Ö Ó× ¾´ Ä℄¸Ëµ ¹ ± ÒÓØ´Ð Ö Ù Ö Ó×´ µµ¸ ×ÙÑ Ð Ö × Ù Ö Ó× ¾´Ä¸Ëµº
  • 64. 64 Capítulo 4. Retroceso, corte y negación 4.14. Máximo número de una lista Ejercicio 4.14 Definir la relación Ñ Ü Ð ×Ø ´·Ä¸¹Æµ que se verifique si Æ es el mayor número de la lista Ä. Por ejemplo, ¹ Ñ Ü Ð ×Ø ´ ¾¸ ¾¿¸ ¸ · ℄¸Æµº Æ ¹ Ñ Ü Ð ×Ø ´ ¹¾¸ ¾¿¸¹ ¸ · ℄¸Æµº Æ ¹¾ ¹ Ñ Ü Ð ×Ø ´ ¾¿¸ · ℄¸Æµº ÆÓ Solución: La definición de Ñ Ü Ð ×Ø es Ñ Ü Ð ×Ø ´Ä¸Åµ ¹ Ñ Ñ Ö´Å¸Äµ¸ ÒÙÑ Ö´Åµ¸ ÒÓØ´´Ñ Ñ Ö´Æ¸Äµ¸ ÒÙÑ Ö´Æµ¸ Æ Åµµº 4.15. Longitud de las subsucesiones comunes maximales Ejercicio 4.15 Definir la relación ÐÓÒ ØÙ × Ñ´·Ä½¸·Ä¾¸¹Æµ que se verifique si Æ es la lon- gitud de las subsucesiones comunes maximales de las listas Ľ y ľ. Por ejemplo, ¹ ÐÓÒ ØÙ × Ñ´ ¾¸½¸ ¸ ¸¾¸¿¸ ¸¾¸ ¸¿℄¸ ½¸ ¸ ¸¿¸¾℄¸Æµº Æ ÆÓ ya que ½¸ ¸¿¸¾℄ es una subsucesión de las dos listas y no poseen ninguna otra subsucesión común de mayor longitud. Obsérvese que los elementos de la subsucesión no son necesariamente elementos adyacentes en las listas. Solución: La definición de ÐÓÒ ØÙ × Ñ es ÐÓÒ ØÙ × Ñ´ ℄¸ ¸¼µº ÐÓÒ ØÙ × Ñ´ ¸ ℄¸¼µº ÐÓÒ ØÙ × Ñ´ Ľ℄¸ ľ℄¸Æµ ¹ ¸ ÐÓÒ ØÙ × Ñ´Ä½¸Ä¾¸Åµ¸ Æ × Å·½º ÐÓÒ ØÙ × Ñ´ Ľ℄¸ ľ℄¸Æµ ¹
  • 65. 4.16. Elementos repetidos en una lista 65 ± ¸ ÐÓÒ ØÙ × Ñ´Ä½¸ ľ℄¸Æ½µ¸ ÐÓÒ ØÙ × Ñ´ Ľ℄¸Ä¾¸Æ¾µ¸ Æ × Ñ Ü´Æ½¸Æ¾µº 4.16. Elementos repetidos en una lista Ejercicio 4.16 Definir la relación Ö Ô Ø Ó´¹ ¸·Äµ que se verifique si el elemento está repe- tido (i.e. ocurre más de una vez) en la lista Ä. Por ejemplo, ¹ Ö Ô Ø Ó´ ¸ ½¸¾¸½¸¿¸ ¸¿℄µº ½ ½ ¿ ¿ ÆÓ ¹ Ö Ô Ø Ó´ ¸ ½¸¾¸ ℄µº ÆÓ Solución: La definición de Ö Ô Ø Ó es Ö Ô Ø Ó´ ¸Äµ ¹ × Ð Ø´ ¸Ä¸Êµ¸ Ñ Ñ Ö ´ ¸Êµº Ejercicio 4.17 Defimir la relación Ð Ñ Ò ´· ¸·Ä½¸¹Ä¾µ que se verifique si ľ es la lista ob- tenida eliminando todas las ocurrencias de en la lista Ľ. Por ejemplo, ¹ Ð Ñ Ò ´ ¸ ½¸ ¸ ¸¿¸ ¸ ¸ ¸ ¸ ℄¸Äµº Ä ½¸ ¸ ¿¸ ¸ ℄ Solución: La definición de Ð Ñ Ò es Ð Ñ Ò ´ ¸ ℄¸ ℄µº Ð Ñ Ò ´ ¸ Ľ℄¸Ä¾µ ¹ Ð Ñ Ò ´ ¸Ä½¸Ä¾µº Ð Ñ Ò ´ ¸ Ľ℄¸ ľ℄µ ¹ ¸ Ð Ñ Ò ´ ¸Ä½¸Ä¾µº Ejercicio 4.18 Definir la relación Ö Ô Ø Ó×´·Ä½¸¹Ä¾µ que se verifique si ľ es la lista de los elementos repetidos de la lista Ľ. Por ejemplo,
  • 66. 66 Capítulo 4. Retroceso, corte y negación ¹ Ö Ô Ø Ó× ½´ ½¸¾¸ ¸¿¸ ¸½¸¿¸ ℄¸Äµº Ä ½¸ ¸ ¿℄ Solución: La primera definición de Ö Ô Ø Ó× es Ö Ô Ø Ó× ½´ ℄¸ ℄µº Ö Ô Ø Ó× ½´ Ľ℄¸ ľ℄µ ¹ Ñ Ñ Ö ´ ¸Ä½µ¸ Ð Ñ Ò ´ ¸Ä½¸Ä¿µ¸ Ö Ô Ø Ó× ½´Ä¿¸Ä¾µº Ö Ô Ø Ó× ½´ Ľ℄¸Ä¾µ ¹ ÒÓØ´Ñ Ñ Ö ´ ¸Ä½µµ¸ Ö Ô Ø Ó× ½´Ä½¸Ä¾µº con cortes se transforma en Ö Ô Ø Ó× ¾´ ℄¸ ℄µº Ö Ô Ø Ó× ¾´ Ľ℄¸ ľ℄µ ¹ Ñ Ñ Ö ´ ¸Ä½µ¸ ¸ Ð Ñ Ò ´ ¸Ä½¸Ä¿µ¸ Ö Ô Ø Ó× ¾´Ä¿¸Ä¾µº Ö Ô Ø Ó× ¾´ Ľ℄¸Ä¾µ ¹ ± ÒÓØ´Ñ Ñ Ö ´ ¸Ä½µµ¸ Ö Ô Ø Ó× ¾´Ä½¸Ä¾µº 4.17. Subconjunto maximal Ejercicio 4.19 Definir la relación ×Ù ÓÒ ÙÒØÓ Ñ Ü Ñ Ð´·Ä½¸¹Ä¾µ que se verifica si ľ es un subconjunto maximal de Ľ (es decir, es un conjunto de elementos de Ľ tal que sólo existe un elemento de Ľ que no pertenece a ľ). Por ejemplo, ¹ ×Ù ÓÒ ÙÒØÓ Ñ Ü Ñ Ð´ ¸ ¸ ¸ ¸ ¸ ¸ ℄¸Äµº Ä ¸ ℄ Ä ¸ ℄ Ä ¸ ℄ ÆÓ Solución: La definición de ×Ù ÓÒ ÙÒØÓ Ñ Ü Ñ Ð es ×Ù ÓÒ ÙÒØÓ Ñ Ü Ñ Ð´Ä½¸Ä¾µ ¹ Ð ×Ø ØÓ × Ø´Ä½¸Ä¿µ¸ × Ð Ø´ ¸Ä¿¸Ä¾µº
  • 67. 4.18. Suma de los elementos con posiciones múltiplos de n 67 Nota: La relación Ð ×Ø ØÓ × Ø se corresponde con la relación Ð ×Ø ÓÒ ÙÒØÓ definida en la página 59. 4.18. Suma de los elementos con posiciones múltiplos de n Ejercicio 4.20 Definir la relación ×ÙÑ ÔÓ× ÓÒ ×´·Æ¸·Ä¸¹Ëµ que se verifique si Ë es la suma de los elementos de la lista que ocupan las posiciones que son múltiplos de Æ. Por ejemplo, ¹×ÙÑ ÔÓ× ÓÒ ×´¾¸ ¿¸ ¸ ¸ ¸½¸¾℄¸Ëµº Ë ½ ¹ ×ÙÑ ÔÓ× ÓÒ ×´¿¸ ¿¸ ¸ ¸ ¸½¸¾℄¸Ëµº Ë Solución: La definición de ×ÙÑ ÔÓ× ÓÒ × es ×ÙÑ ÔÓ× ÓÒ ×´Æ¸Ä¸Ëµ ¹ Ð Ñ ÒØÓ Ý Ö ×ØÓ´Æ¸Ä¸ ¸Ä½µ¸ ¸ ×ÙÑ ÔÓ× ÓÒ ×´Æ¸Ä½¸Ë½µ¸ Ë × ·Ë½º ×ÙÑ ÔÓ× ÓÒ ×´ ¸ ¸¼µº donde Ð Ñ ÒØÓ Ý Ö ×ØÓ´·Æ¸·Ä½¸¹ ¸¹Ä¾µ se verifica si es el elemento Æ–ésimo de Ľ y ľ es la lista Ľ a partir del elemento . Por ejemplo, ¹ Ð Ñ ÒØÓ Ý Ö ×ØÓ´¿¸ ¿¸ ¸ ¸ ¸½¸¾℄¸ ¸Äµº Ä ¸ ½¸ ¾℄ La definición de Ð Ñ ÒØÓ Ý Ö ×ØÓ es Ð Ñ ÒØÓ Ý Ö ×ØÓ´Æ¸Ä½¸ ¸Ä¾µ ¹ Ð Ò Ø ´Ä¸Æµ¸ ÔÔ Ò ´Ä¸Ä¾¸Ä½µ¸ Ð ×Ø´Ä¸ µº 4.19. Compresión de listas Ejercicio 4.21 Definir la relación ÓÑÔÖ Ñ ´·Ä½¸¹Ä¾µ que se verifique si ľ es la lista obte- nida sustituyendo cada sucesión de un elemento de Ľ por dicho elemento. Por ejemplo,
  • 68. 68 Capítulo 4. Retroceso, corte y negación ¹ ÓÑÔÖ Ñ ´ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ℄¸Äµº Ä ¸ ¸ ¸ ¸ ℄ Solución: Vamos a presentar dos definiciones. La primera definición de ÓÑÔÖ Ñ es ÓÑÔÖ Ñ ´ ℄¸ ℄µº ÓÑÔÖ Ñ ´ ℄¸ ℄µº ÓÑÔÖ Ñ ´ ¸ Ľ℄¸Ä¾µ ¹ ÓÑÔÖ Ñ ´ Ľ℄¸Ä¾µº ÓÑÔÖ Ñ ´ ¸ Ľ℄¸ ľ℄µ ¹ ¸ ÓÑÔÖ Ñ ´ Ľ℄¸Ä¾µº En la segunda definición se usa el corte ÓÑÔÖ Ñ ¾´ ℄¸ ℄µº ÓÑÔÖ Ñ ¾´ ℄¸ ℄µº ÓÑÔÖ Ñ ¾´ ¸ Ľ℄¸Ä¾µ ¹ ¸ ¸ ÓÑÔÖ Ñ ¾´ Ľ℄¸Ä¾µº ÓÑÔÖ Ñ ¾´ ¸ Ľ℄¸ ľ℄µ ¹ ± ¸ ÓÑÔÖ Ñ ¾´ Ľ℄¸Ä¾µº 4.20. Empaquetamiento de listas Ejercicio 4.22 Definir la relación ÑÔ ÕÙ Ø ´·Ä½¸¹Ä¾µ que se verifique si ľ es la lista obtenida sustituyendo cada sucesión de un elemento de Ľ por la lista formada por dicha sucesión. Por ejemplo, ¹ ÑÔ ÕÙ Ø ´ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ℄¸Äµº Ä ℄¸ ¸ ℄¸ ¸ ¸ ℄¸ ¸ ℄¸ ¸ ¸ ℄℄ Solución: La definición de ÑÔ ÕÙ Ø es ÑÔ ÕÙ Ø ´ ℄¸ ℄µº ÑÔ ÕÙ Ø ´ Ľ℄¸ ľ Ä¿℄µ ¹ ÑÔ ÕÙ Ø ÙÜ´ ¸Ä½¸Ä ¸Ä¾µ¸ ÑÔ ÕÙ Ø ´Ä ¸Ä¿µº
  • 69. 4.21. Codificación por longitud 69 La relación ÑÔ ÕÙ Ø ÙÜ´ ¸Ä½¸Ä ¸Ä¾µ se verifica si Ä es la lista obtenida eli- minando en Ľ todas las ocurrencias iniciales de y ľ es la lista formada por y las ocurrencias iniciales de en Ľ; por ejemplo, ¹ ÑÔ ÕÙ Ø ÙÜ´ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ℄¸Ä ¸Ä¾µº Ä ¸ ¸ ¸ ¸ ℄ ľ ¸ ¸ ℄ La definición de ÑÔ ÕÙ Ø ÙÜ es ÑÔ ÕÙ Ø ÙÜ´ ¸ ℄¸ ℄¸ ℄µº ÑÔ ÕÙ Ø ÙÜ´ ¸ Ľ℄¸Ä ¸ ľ℄µ ¹ ÑÔ ÕÙ Ø ÙÜ´ ¸Ä½¸Ä ¸Ä¾µº ÑÔ ÕÙ Ø ÙÜ´ ¸ Ľ℄¸ Ľ℄¸ ℄µ ¹ º La definición anterior puede transformarse introduciendo corte en ÑÔ ÕÙ Ø ÙÜ ¾´ ¸ ℄¸ ℄¸ ℄µº ÑÔ ÕÙ Ø ÙÜ ¾´ ¸ Ľ℄¸Ä ¸ ľ℄µ ¹ ¸ ÑÔ ÕÙ Ø ÙÜ ¾´ ¸Ä½¸Ä ¸Ä¾µº ÑÔ ÕÙ Ø ÙÜ ¾´ ¸ Ľ℄¸ Ľ℄¸ ℄µº 4.21. Codificación por longitud Ejercicio 4.23 Definir la relación Ó ´·Ä½¸¹Ä¾µ que se verifique si ľ es la codifica- ción por longitud de la lista Ľ; es decir, las sucesiones de un mismo elemento de Ľ se codifican por términos de la forma ƹ donde Æ es la longitud de la sucesión. Por ejemplo, ¹ Ó ´ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ℄¸Äµº Ä ½¹ ¸ ¾¹ ¸ ¿¹ ¸ ¾¹ ¸ ¿¹ ℄ (Indicación: Usar la relación ÑÔ ÕÙ Ø (4.20)). Solución: La definición de Ó es Ó ´Ä½¸Ä¾µ ¹ ÑÔ ÕÙ Ø ´Ä½¸Äµ¸ Ó Ùܴĸľµº
  • 70. 70 Capítulo 4. Retroceso, corte y negación La relación Ó ÙÜ´·Ä½¸¹Ä¾µ se verifica si, suponiendo que Ľ es una lista de la forma ½¸ººº¸ ½℄¸ººº¸ Ѹºººº Ñ℄℄), ľ es la lista ƽ¹ ½¸ºººÆÑ¹ Ñ℄ donde Æ es la longitud de ¸ººº¸ ℄. Por ejemplo. ¹ Ó ÙÜ´ ℄¸ ¸ ℄¸ ¸ ¸ ℄¸ ¸ ℄¸ ¸ ¸ ℄℄¸Äµº Ä ½¹ ¸ ¾¹ ¸ ¿¹ ¸ ¾¹ ¸ ¿¹ ℄ La definición de Ó ÙÜ es Ó ÙÜ´ ℄¸ ℄µº Ó ÙÜ´ ℄ Ľ℄¸ ƹ ľ℄µ ¹ Ð Ò Ø ´ ℄¸Æµ¸ Ó ÙܴĽ¸Ä¾µº 4.22. Codificación reducida por longitud Ejercicio 4.24 Definir la relación Ó Ö Ù ´·Ä½¸¹Ä¾µ que se verifique si ľ es la codificación reducida por longitud de la lista Ľ; es decir, las sucesiones de un mismo elemento de Ľ se codifican por términos de la forma ƹ donde Æ es la longitud de la sucesión cuando Æ es mayor que 1 y por cuando Æ es igual a 1. Por ejemplo, ¹ Ó Ö Ù ´ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ℄¸Äµº Ä ¸ ¾¹ ¸ ¿¹ ¸ ¸ ¿¹ ℄ (Indicación: Usar la relación Ó (4.21)). Solución: La definición de Ó Ö Ù es Ó Ö Ù ´Ä½¸Ä¾µ ¹ Ó ´Ä½¸Äµ¸ Ó Ö Ù Ùܴĸľµº La relación Ó Ö Ù ÙÜ´·Ä½¸¹Ä¾µ se verifica si ľ es la lista obtenida transformando los elementos de Ľ de la forma ½¹ por y dejando los restantes elemen- tos de la misma forma (se supone que Ľ es una lista de la forma ƽ¹ ½¸ººº¸ÆÑ¹ Ñ℄). Por ejemplo, ¹ Ó Ö Ù ÙÜ´ ½¹ ¸¾¹ ¸¿¹ ¸½¹ ¸¿¹ ℄¸Äµº Ä ¸ ¾¹ ¸ ¿¹ ¸ ¸ ¿¹ ℄ La definición de Ó Ö Ù ÙÜ es
  • 71. 4.23. Decodificación de lista 71 Ó Ö Ù ÙÜ´ ℄¸ ℄µº Ó Ö Ù ÙÜ´ ½¹ Ľ℄¸ ľ℄µ ¹ Ó Ö Ù ÙܴĽ¸Ä¾µº Ó Ö Ù ÙÜ´ ƹ Ľ℄¸ ƹ ľ℄µ ¹ Æ ½¸ Ó Ö Ù ÙܴĽ¸Ä¾µº La definición anterior puede simplificarse introduciendo un corte: Ó Ö Ù ÙÜ´ ℄¸ ℄µº Ó Ö Ù ÙÜ´ ½¹ Ľ℄¸ ľ℄µ ¹ ¸ Ó Ö Ù ÙܴĽ¸Ä¾µº Ó Ö Ù ÙÜ´ ƹ Ľ℄¸ ƹ ľ℄µ ¹ ± Æ ½¸ Ó Ö Ù ÙܴĽ¸Ä¾µº 4.23. Decodificación de lista Ejercicio 4.25 Definir la relación Ó ´·Ä½¸¹Ä¾µ que, dada la lista Ľ, devuelve la lista ľ cuya codificación reducida por longitud es Ľ. Por ejemplo, ¹ Ó ´ ¸¾¹ ¸¿¹ ¸ ¸¿¹ ℄¸Äµº Ä ¸ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ℄ Solución: La definición de Ó es Ó ´ ℄¸ ℄µº Ó ´ ½¹ Ľ℄¸ ľ℄µ ¹ ¸ Ó ´Ä½¸Ä¾µº Ó ´ ƹ Ľ℄¸ ľ℄µ ¹ ± Æ ½¸ ¸ ƽ × Æ ¹ ½¸ Ó ´ ƽ¹ Ľ℄¸Ä¾µº Ó ´ Ľ℄¸ ľ℄µ ¹ ± × Ø Ñ Ó Ó ´Ä½¸Ä¾µº
  • 72. 72 Capítulo 4. Retroceso, corte y negación 4.24. Codificación reducida directa Ejercicio 4.26 Definir la relación Ó Ö Ø ´·Ä½¸¹Ä¾µ que se verifica si ľ es la codificación reducida de Ľ (es decir, las sucesiones de un mismo elemento de Ľ se codifican por términos de la forma ƹ donde Æ es la longitud de la sucesión cuando Æ es mayor que 1 y por cuando Æ es igual a 1), pero en su definición no se crean listas de elementos repetidos como en la definición de Ó Ö Ù . Por ejemplo, ¹ Ó Ö Ø ´ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ℄¸Äµº Ä ¸ ¾¹ ¸ ¿¹ ¸ ¸ ¿¹ ℄ Solución: La definición de Ó Ö Ø es Ó Ö Ø ´ ℄¸ ℄µº Ó Ö Ø ´ Ľ℄¸ Ì Ä¾℄µ ¹ Ù ÒØ Ý Ö ×ØÓ´ ¸ Ľ℄¸Æ¸Ä¿µ¸ Ø ÖÑ ÒӴƸ ¸Ìµ¸ Ó Ö Ø ´Ä¿¸Ä¾µº La relación Ù ÒØ Ý Ö ×ØÓ´· ¸·Ä½¸¹Æ¸¹Ä¾µ se verifica si Æ es el número de veces que aparece en la cabeza de la lista Ľ y ľ es el resto de la lista Ľ cuando se le quita la sucesión de elementos de su cabeza. Por ejemplo, ¹ Ù ÒØ Ý Ö ×ØÓ´ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ℄¸Æ¸Äµº Æ ¾ Ä ¸ ¸ ¸ ¸ ¸ ¸ ℄ La definición de Ù ÒØ Ý Ö ×ØÓ es Ù ÒØ Ý Ö ×ØÓ´ ¸ Ľ℄¸Æ¸Ä¾µ ¹ Ù ÒØ Ý Ö ×ØÓ´ ¸Ä½¸Å¸Ä¾µ¸ Æ × Å·½º Ù ÒØ Ý Ö ×ØÓ´ ¸ Ä℄¸¼¸ Ä℄µ ¹ º Ù ÒØ Ý Ö ×ØÓ´ ¸ ℄¸¼¸ ℄µº La definición anterior puede simplificarse con cortes: Ù ÒØ Ý Ö ×ØÓ ½´ ¸ Ľ℄¸Æ¸Ä¾µ ¹ ¸ Ù ÒØ Ý Ö ×ØÓ ½´ ¸Ä½¸Å¸Ä¾µ¸ Æ × Å·½º Ù ÒØ Ý Ö ×ØÓ ½´ ¸Ä¸¼¸Äµº
  • 73. 4.25. Cota superior de una lista de números 73 La relación Ø ÖÑ ÒÓ´·Æ¸· ¸¹Ìµ se verifica si Ì es el término correspondiente al nú- mero Æ y al elemento (es decir, Ì es si Æ es 1 y es ƹ en otro caso). Por ejemplo, ¹ Ø ÖÑ ÒÓ´½¸ ¸Ìµº Ì ¹ Ø ÖÑ ÒÓ´¾¸ ¸Ìµº Ì ¾¹ La definición de Ø ÖÑ ÒÓ es Ø ÖÑ ÒÓ´½¸ ¸ µº Ø ÖÑ ÒӴƸ ¸Æ¹ µ ¹ Æ ½º La definición anterior puede simplificarse con cortes: Ø ÖÑ ÒÓ ½´½¸ ¸ µ ¹ º Ø ÖÑ ÒÓ ½´Æ¸ ¸Æ¹ µº ± ¹ Æ ½º 4.25. Cota superior de una lista de números Ejercicio 4.27 Definir la relación ÓØ ×ÙÔ Ö ÓÖ´·Ä¸·Æµ que se verifique si Æ es una cota superior de Ä (es decir, todos los elementos de Ä son menores o iguales que Æ). Por ejemplo, ¹ ÓØ ×ÙÔ Ö ÓÖ´ ½¸ ¸¿℄¸ µº × ¹ ÓØ ×ÙÔ Ö ÓÖ´ ½¸ ¸¿℄¸ µº × ¹ ÓØ ×ÙÔ Ö ÓÖ´ ½¸ ¸¿℄¸ µº ÆÓ Dar dos definiciones, una recursiva y la otra no recursiva. Solución: La definición recursiva de ÓØ ×ÙÔ Ö ÓÖ es ÓØ ×ÙÔ Ö ÓÖ ½´ ℄¸ µº ÓØ ×ÙÔ Ö ÓÖ ½´ Ä℄¸Æµ ¹ Ƹ ÓØ ×ÙÔ Ö ÓÖ ½´Ä¸Æµº La definición no recursiva de ÓØ ×ÙÔ Ö ÓÖ es
  • 74. 74 Capítulo 4. Retroceso, corte y negación ÓØ ×ÙÔ Ö ÓÖ ¾´Ä¸Æµ ¹ · ´Ñ Ñ Ö´ ¸Äµ¸ Ƶº Mediante el siguiente ejemplo se compara la eficiencia de las dos definiciones ¹ ÒÙÑÐ ×Ø´½¸½¼¼¼¼¸ ĵ¸ Ø Ñ ´ ÓØ ×ÙÔ Ö ÓÖ ½´ ĸ½¼¼¼¼µµº ± ¾¼¸¼¼½ Ò Ö Ò ×¸ ¼º¼¼ ÈÍ Ò ¼º¼½ × ÓÒ × ´¼± È͸ ÁÒ Ò Ø Ä Ô×µ ¹ ÒÙÑÐ ×Ø´½¸½¼¼¼¼¸ ĵ¸ Ø Ñ ´ ÓØ ×ÙÔ Ö ÓÖ ¾´ ĸ½¼¼¼¼µµº ± ¿¼¸¼¼¾ Ò Ö Ò ×¸ ¼º¼½ ÈÍ Ò ¼º¼½ × ÓÒ × ´ ¿± È͸ ¿¼¼¼¾¼¼ Ä Ô×µ ¹ ÒÙÑÐ ×Ø´½¸½¼¼¼¼¼¸ ĵ¸ Ø Ñ ´ ÓØ ×ÙÔ Ö ÓÖ ½´ ĸ½¼¼¼¼¼µµº ± ¾¼¼¸¼¼½ Ò Ö Ò ×¸ ¼º¼ ÈÍ Ò ¼º¼ × ÓÒ × ´ ± È͸ ¾ ½ Ä Ô×µ ¹ ÒÙÑÐ ×Ø´½¸½¼¼¼¼¼¸ ĵ¸ Ø Ñ ´ ÓØ ×ÙÔ Ö ÓÖ ¾´ ĸ½¼¼¼¼¼µµº ± ¿¼¼¸¼¼¾ Ò Ö Ò ×¸ ¼º¼ ÈÍ Ò ¼º¼ × ÓÒ × ´½¼ ± È͸ ¿ ¼¼¾ Ä Ô×µ 4.26. Dientes de sierra Ejercicio 4.28 Definir la relación ÒØ ´·Ä¸¹Ä½¸¹ ¸¹Ä¾µ que se verifique si Ä se compone de una lista Ľ de números estrictamente creciente hasta un cierto número que llamaremos cima, de la cima y de una lista ľ de números estrictamente decreciente. Las listas tiene Ľ y ľ tienen que ser no vacías y la cima es el mayor elemento de Ä. Por ejemplo, ¹ ÒØ ´ ½¸¾¸ ¸ ¸¿¸½℄¸Ä½¸ ¸Ä¾µº Ľ ½¸ ¾℄ ľ ¸ ¿¸ ½℄ ÆÓ ¹ ÒØ ´ ½¸¾¸ ℄¸Ä½¸ ¸Ä¾µº ÆÓ Las listas que poseen esta forma de descomposición se llaman dientes. Solución: La definición de ÒØ es ÒØ ´Ä¸ ½ Ľ℄¸ ¸ ¾ ľ℄µ ¹ ÔÔ Ò ´ ½ Ľ℄¸ ¸ ¾ ľ℄¸Äµ¸ Ö ÒØ ´ ½ Ľ℄µ¸ Ð ×Ø´ ½ Ľ℄¸ µ¸ ¸ Ö ÒØ ´ ¸ ¾ ľ℄µº La relación Ö ÒØ ´·Äµ se verifica si la lista de números Ä es estrictamente creciente.
  • 75. 4.26. Dientes de sierra 75 Ö ÒØ ´ ℄µº Ö ÒØ ´ ¸ Ä℄µ ¹ ¸ Ö ÒØ ´ Ä℄µº La relación Ö ÒØ ´·Äµ se verifica si la lista de números Ä es estrictamente decre- ciente. Ö ÒØ ´ ℄µº Ö ÒØ ´ ¸ Ä℄µ ¹ ¸ Ö ÒØ ´ Ä℄µº Ejercicio 4.29 Una sierra es una lista numérica compuesta por la yuxtaposición de dientes. Nótese 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. Definir la relación ÒØ × × ÖÖ ´·Ä½¸ ľµ que se verifique si Ľ es una sierra y ľ es la lista de los dientes de Ľ. Por ejemplo, ¹ ÒØ × × ÖÖ ´ ½¸¾¸½¸¿¸½℄¸Äµº Ä ½¸ ¾¸ ½℄¸ ½¸ ¿¸ ½℄℄ ÆÓ ¹ ÒØ × × ÖÖ ´ ½¸¾¸½¸½¸¿¸½℄¸Äµº ÆÓ Solución: La definición de ÒØ × × ÖÖ es ÒØ × × ÖÖ ´Ä¸ Ä℄µ ¹ ÒØ ´Ä¸ ¸ ¸ µ¸ º ÒØ × × ÖÖ ´Ä¸ Ľ Ê℄µ ¹ ÔÔ Ò ´Ä½¸Ä¾¸Äµ¸ ÒØ ´Ä½¸ ¸ ¸ µ¸ Ð ×Ø´Ä½¸ µ¸ ÒØ × × ÖÖ ´ ľ℄¸Êµº El corte aumenta la eficiencia como se aprecia en el siguiente ejemplo con la definición con corte ¹ ÒÙÑÐ ×Ø´½¸½¼¼¸ Ľµ¸ ÔÔ Ò ´ Ľ¸ ½ Ľ℄¸ ľµ¸ Ø Ñ ´ ÒØ × × ÖÖ ´ ľ¸Äµµº ± ½¸ Ò Ö Ò ×¸ ¼º¿ ÈÍ Ò ¼º¿ × ÓÒ × ´ ± È͸ ½ ½ ¿¼¼ Ä Ô×µ ÆÓ
  • 76. 76 Capítulo 4. Retroceso, corte y negación y el mismo ejemplo con la definición sin el corte ¹ ÒÙÑÐ ×Ø´½¸½¼¼¸ Ľµ¸ ÔÔ Ò ´ Ľ¸ ½ Ľ℄¸ ľµ¸ Ø Ñ ´ ÒØ × × ÖÖ ´ ľ¸Äµµº ± ¿¸½ ¸¾ ¼ Ò Ö Ò ×¸ ¼º ¾ ÈÍ Ò ¼º × ÓÒ × ´ ± È͸ ¿ ¾¼ Ä Ô×µ ÆÓ
  • 77. Capítulo 5 Programación lógica de segundo orden 5.1. Determinación de un número por su factorial Ejercicio 5.1 Definir la relación ØÓÖ Ð ÒÚ Ö×Ó´· ¸¹Æµ que se verifique si es el facto- rial de Æ. Por ejemplo, ¹ ØÓÖ Ð ÒÚ Ö×Ó´½¾¼¸Æµº Æ ÆÓ ¹ ØÓÖ Ð ÒÚ Ö×Ó´ ¼¸Æµº ÆÓ Solución: Presentamos tres definiciones y comparamos su eficicencia. La primera definición usa un acumulador para almacenar los candidatos de la so- lución. ØÓÖ Ð ÒÚ Ö×Ó ½´ ¸Æµ ¹ ØÓÖ Ð ÒÚ Ö×Ó ½ ÙÜ´ ¸½¸Æµº La relación ØÓÖ Ð ÒÚ Ö×Ó ½ ÙÜ´· ¸· ¸¹Æµ se verifica si Æ es el menor número mayor o igual que cuyo factorial es . ØÓÖ Ð ÒÚ Ö×Ó ½ ÙÜ´ ¸ ¸ µ ¹ ØÓÖ Ð´ ¸ µº ØÓÖ Ð ÒÚ Ö×Ó ½ ÙÜ´ ¸ ¸Æµ ¹ ØÓÖ Ð´ ¸Æ½µ¸ ƽ ¸ ½ × · ½¸ ØÓÖ Ð ÒÚ Ö×Ó ½ ÙÜ´ ¸ ½¸Æµº 77
  • 78. 78 Capítulo 5. Programación lógica de segundo orden La relación ØÓÖ Ð´·Æ¸¹ µ se verifica si es el factorial de Æ. ØÓÖ Ð´½¸½µº ØÓÖ Ð´Æ¸ µ ¹ Æ ½¸ ƽ × Æ¹½¸ ØÓÖ Ð´Æ½¸ ½µ¸ × ½ ¶ ƺ La segunda definición se diferencia de la anterior en que almacena en memoria los factoriales de los candidatos considerados. ØÓÖ Ð ÒÚ Ö×Ó ¾´ ¸Æµ ¹ ØÓÖ Ð ÒÚ Ö×Ó ¾ ÙÜ´ ¸½¸Æµº La relación ØÓÖ Ð ÒÚ Ö×Ó ¾ ÙÜ´· ¸· ¸¹Æµ se verifica si Æ es el menor número mayor o igual que cuyo factorial (con memoria) es . ØÓÖ Ð ÒÚ Ö×Ó ¾ ÙÜ´ ¸ ¸ µ ¹ ØÓÖ Ð ÓÒ Ñ ÑÓÖ ´ ¸ µº ØÓÖ Ð ÒÚ Ö×Ó ¾ ÙÜ´ ¸ ¸Æµ ¹ ØÓÖ Ð ÓÒ Ñ ÑÓÖ ´ ¸Æ½µ¸ ƽ ¸ ½ × · ½¸ ØÓÖ Ð ÒÚ Ö×Ó ¾ ÙÜ´ ¸ ½¸Æµº La relación ØÓÖ Ð ÓÒ Ñ ÑÓÖ ´·Æ¸¹ µ se verifica si es el factorial de Æ. Además almacena en la base de datos internas los factoriales calculados. ¹ ÝÒ Ñ ØÓÖ Ð ÓÒ Ñ ÑÓÖ »¾º ØÓÖ Ð ÓÒ Ñ ÑÓÖ ´½¸½µº ØÓÖ Ð ÓÒ Ñ ÑÓÖ ´Æ¸ µ ¹ Æ ½¸ ƽ × Æ¹½¸ ØÓÖ Ð ÓÒ Ñ ÑÓÖ ´Æ½¸ ½µ¸ × ½ ¶ Ƹ ×× ÖØ ´ ØÓÖ Ð ÓÒ Ñ ÑÓÖ ´Æ¸ µ ¹ µº En la tercera definición se utiliza dos acumuladores para almacenar el candidato y el factorial del candidato anterior.
  • 79. 5.2. Árbol de resolución y definiciones equivalentes 79 ØÓÖ Ð ÒÚ Ö×Ó ¿´ ¸Æµ ¹ ØÓÖ Ð ÒÚ Ö×Ó ÙÜ ¿´ ¸½¸½¸Æµº La relación ØÓÖ Ð ÒÚ Ö×Ó ÙÜ ¿´· ¸· ¸· ¸¹Æµ se verifica si X = A ∗ (A + 1) ∗ · · · ∗ N (de forma que si A = 1 entonces X = N!). ØÓÖ Ð ÒÚ Ö×Ó ÙÜ ¿´ ¸ ¸ ¸ µ ¹ ¶ º ØÓÖ Ð ÒÚ Ö×Ó ÙÜ ¿´ ¸ ¸ ¸Æµ ¹ ½ × ¶ ¸ ½ ¸ ¸ ½ × · ½¸ ØÓÖ Ð ÒÚ Ö×Ó ÙÜ ¿´ ¸ ½¸ ½¸Æµº En los siguientes ejemplos se compara la eficiencia. ¹ ØÓÖ Ð´¾ ¼¸ µ¸ Ø Ñ ´ ØÓÖ Ð ÒÚ Ö×Ó ½´ ¸ Ƶµº ± ¾ ¸ ¼½ Ò Ö Ò ×¸ ¼º¾ ÈÍ Ò ¼º¿¼ × ÓÒ × ´ ± È͸ ½¼ Ä Ô×µ ¹ ØÓÖ Ð´¾ ¼¸ µ¸ Ø Ñ ´ ØÓÖ Ð ÒÚ Ö×Ó ¾´ ¸ Ƶµº ± ¿¸ Ò Ö Ò ×¸ ¼º¼¼ ÈÍ Ò ¼º¼¼ × ÓÒ × ´¼± È͸ ÁÒ Ò Ø Ä Ô×µ ¹ ØÓÖ Ð´¾ ¼¸ µ¸ Ø Ñ ´ ØÓÖ Ð ÒÚ Ö×Ó ¿´ ¸ Ƶµº ± ½¸¾ Ò Ö Ò ×¸ ¼º¼¼ ÈÍ Ò ¼º¼½ × ÓÒ × ´¼± È͸ ÁÒ Ò Ø Ä Ô×µ ¹ ØÓÖ Ð´½¼¼¼¸ µ¸ Ø Ñ ´ ØÓÖ Ð ÒÚ Ö×Ó ½´ ¸ Ƶµº ± ¿¾½¸ ¾¾ Ò Ö Ò ×¸ ¼º ÈÍ Ò ¼º × ÓÒ × ´ ± È͸ ¿ Ä Ô×µ ÊÊÇÊ ÇÙØ Ó ÐÓ Ð ×Ø ¹ ØÓÖ Ð´½¼¼¼¸ µ¸ Ø Ñ ´ ØÓÖ Ð ÒÚ Ö×Ó ¾´ ¸ Ƶµº ± ½¿¸ Ò Ö Ò ×¸ ¼º¼ ÈÍ Ò ¼º¼ × ÓÒ × ´ ± È͸ ½ ½ Ä Ô×µ ¹ ØÓÖ Ð´½¼¼¼¸ µ¸ Ø Ñ ´ ØÓÖ Ð ÒÚ Ö×Ó ¿´ ¸ Ƶµº ± ¸ Ò Ö Ò ×¸ ¼º¼¿ ÈÍ Ò ¼º¼¿ × ÓÒ × ´½¼ ± È͸ ½ ¼¼ Ä Ô×µ 5.2. Árbol de resolución y definiciones equivalentes Ejercicio 5.2 Se piden los siguientes apartados:
  • 80. 80 Capítulo 5. Programación lógica de segundo orden 1. Dibujar el árbol de resolución correspondiente al programa Ô´ ℄¸ ℄µº Ô´ ℄¸ ℄µ ¹ ¸ ¸ Ô´ ¸ µº Ô´ ℄¸ µ ¹ Ô´ ¸ µº y al objetivo ¹ Ô´ ¸½¸ ℄¸ µº 2. Explicar la relación que hay entre Ľ y ľ cuando se verifica ԴĽ¸Ä¾µ. 3. Dar una definición no recursiva del predicado ԴĽ¸Ä¾µ. Solución: 1. El árbol de resolución está en la figura 5.1 (página 81). 2. la relación ԴĽ¸Ä¾µ se verifica si ľ es la lista de los elementos de Ľ que son mayores que 4. 3. Una definición no recursiva de Ô es Ô½´Ä½¸Ä¾µ ¹ Ò Ðд ¸´Ñ Ñ Ö´ ¸Ä½µ¸ µ¸Ä¾µº 5.3. Nodos de una generación en una lista de árboles bi- narios Ejercicio 5.3 Un árbol binario es vacío o consta de tres partes: la raíz (que debe de ser un número positivo), el subárbol izquierdo (que debe ser un árbol binario) y el subárbol derecho (que debe ser un árbol binario). Usaremos la siguiente representación Ò Ð representa el árbol vacío Ø´Á¸Ê¸ µ representa el árbol de la raíz Ê, subárbol izquierdo Á y subárbol derecho . Por ejemplo, Ø´Ø´Ò Ð¸¾¸Ò е¸½¸Ø´Ø´Ò и ¸Ò е¸¿¸Ò еµ representa el árbol
  • 81. 5.3. Nodos de una generación en una lista de árboles binarios 81 5 > 4, !, p([1,6],B1) !, p([1,6],B1) 2 {X1/5, A1/[1,6], B0/[5|B1]} 2 {X3/1, A3/[6], B1/[1|B3]} 3 {X3/1, A3/[6], B3/B1} p([6],B1)1 > 4, !, p([6],B3) 2 {X4/6, A4/[], B1/[6|B4]} 6 > 4, !, p([],B4) !, p([],B4) p([5,1,6],B0) 3 Fallo p([],B4) 1 {B4/[]} B = B0 = [5|B1] = [5,6|B4] = [5,6] Figura 5.1: Árbol de resolución
  • 82. 82 Capítulo 5. Programación lógica de segundo orden ½ » ¾ ¿ » Definir la relación Ò Ö Ò´·Æ¸·Ä½¸¹Ä¾µ que se verifique si ľ es la lista de nodos de la generación Æ de la lista de árboles Ľ. Por ejemplo, ¹ Ò Ö Ò´¼¸ Ø´Ø´Ò Ð¸¾¸Ò е¸¿¸Ò е¸Ø´Ò и ¸Ø´Ò и ¸Ò еµ℄¸Äµº Ä ¿¸ ℄ ¹ Ò Ö Ò´½¸ Ø´Ø´Ò Ð¸¾¸Ò е¸¿¸Ò е¸Ø´Ò и ¸Ø´Ò и ¸Ò еµ℄¸Äµº Ä ¾¸ ℄ ¹ Ò Ö Ò´¾¸ Ø´Ø´Ò Ð¸¾¸Ò е¸¿¸Ò е¸Ø´Ò и ¸Ø´Ò и ¸Ò еµ℄¸Äµº Ä ℄ Solución: La definición de Ò Ö Ò es Ò Ö Ò´¼¸Ä¸ µ ¹ Ò ÐÐ´Ê¸Ñ Ñ Ö´Ø´ ¸Ê¸ µ¸Äµ¸ µº Ò Ö Ò´Æ¸Ä¸ µ ¹ Æ ¼¸ Ð Ñ Ò Ö ×´Ä¸Ä½µ¸ ƽ × Æ¹½¸ Ò Ö Ò´Æ½¸Ä½¸ µº donde Ð Ñ Ò Ö ×´·Ä½¸¹Ä¾µ se verifica si ľ es la lista de los árboles obtenidos de la lista de árboles Ľ eliminando sus raices. Por ejemplo, ¹ Ð Ñ Ò Ö ×´ Ø´Ø´Ò Ð¸¾¸Ò е¸¿¸Ò е¸Ø´Ò и ¸Ø´Ò и ¸Ò еµ℄¸Äµº Ä Ø´Ò Ð¸ ¾¸ Ò Ðµ¸ Ò Ð¸ Ò Ð¸ Ø´Ò Ð¸ ¸ Ò Ðµ℄ La definición de Ð Ñ Ò Ö × es Ð Ñ Ò Ö ×´ ℄¸ ℄µº Ð Ñ Ò Ö ×´ Ò Ð Ä½℄¸Ä¾µ ¹ Ð Ñ Ò Ö ×´Ä½¸Ä¾µº Ð Ñ Ò Ö ×´ Ø´Á¸ ¸ µ Ľ℄¸ Á¸ ľ℄µ ¹ Ð Ñ Ò Ö ×´Ä½¸Ä¾µº
  • 83. 5.4. Lista de elementos únicos 83 5.4. Lista de elementos únicos Ejercicio 5.4 Definir la relación Ò Ó×´·Ä½¸¹Ä¾µ que se verifique si ľ es la lista de los ele- mentos que ocurren solamente una vez en la lista Ľ. Por ejemplo, ¹ Ò Ó×´ ¾¸ ¸¿¸¾℄¸Äµº Ä ¸ ¿℄ ¹ Ò Ó×´ ¾¸ ¸ ¸¾℄¸Äµº Ä ℄ Solución: La definición de Ò Ó× es Ò Ó״Ľ¸Ä¾µ ¹ Ò Ðд ¸ × Ò Ó´ ¸Ä½µ¸Ä¾µº donde la relación × Ò Ó´ ¸·Äµ se verifica si es un elemento que ocurre solamente una vez en la lista Ä. Por ejemplo, ¹ × Ò Ó´ ¸ ¾¸ ¸¿¸¾℄µº ¿ ÆÓ × Ò Ó´ ¸Äµ ¹ × Ð Ø´ ¸Ä¸Êµ¸ ÒÓØ´Ñ Ñ Ö ´ ¸Êµµº 5.5. Elementos más frecuentes de una lista Ejercicio 5.5 Definir el predicado ÔÓÔÙÐ Ö ×´Ä½¸Ä¾µ que se verifique si ľ es la lista de los elementos de Ľ que aparecen el mayor número de veces. Por ejemplo, ¹ ÔÓÔÙÐ Ö ×´ ÖÓ× ¸ Ù Ò¸ Ú ¸Ñ ÒÙ¸ÖÓ× ¸ÒÙÖ ¸ Ú ℄¸Äµº Ä Ú ¸ÖÓ× ℄ Solución: La definición de ÔÓÔÙÐ Ö × es ÔÓÔÙÐ Ö ×´Ä½¸Ä¾µ ¹ × ØÓ ´ ¸ ´´Ñ Ñ Ö´ ¸Ä½µ¸ Ù ÒØ ´ ¸Ä½¸Æ½µ¸
  • 84. 84 Capítulo 5. Programación lógica de segundo orden ÒÓØ´´Ñ Ñ Ö´ ¸Ä½µ¸ Ù ÒØ ´ ¸Ä½¸Æ¾µ¸ ƽ ƾµµµµ¸ ľµº La relación Ù ÒØ ´· ¸·Ä¸¹Æµ se verifica si Æ es el número de veces que aparece el ele- mento en la lista Ä. Por ejemplo, ¹ Ù ÒØ ´ ¸ Ö¸ ¸ ¸Ñ¸Ö¸Ò¸ ℄¸Æµº Æ ¾ La definición de Ù ÒØ es Ù ÒØ ´ ¸ ℄¸¼µº Ù ÒØ ´ ¸ Ä℄¸Æµ ¹ ¸ ¸ Ù ÒØ ´ ¸Ä¸Åµ¸ Æ × Å·½º Ù ÒØ ´ ¸ Ä℄¸Æµ ¹ ± ¸ Ù ÒØ ´ ¸Ä¸Æµº 5.6. Problema 3n + 1 Ejercicio 5.6 Consideremos la función siguiente definida sobre los números naturales: f (x) = 3x + 1, si x es impar; x/2, si x es par se pide: 1. Definir la relación ×Ù × Ò´· ¸ ĵ que se verifique si Ä es la lista de los elementos X, f (X), f (f (X)), . . . , f n(X) tal que f n(X) = 1. Por ejemplo, ¹ ×Ù × Ò´¿¸Äµº Ä ¿¸ ½¼¸ ¸ ½ ¸ ¸ ¸ ¾¸ ½℄ Ä se llama la sucesión generada por Æ. 2. Definir la relación ÐÓÒ ØÙ ×´· ¸ ĵ que se verifica si Ä la lista de pares ¹Æ donde es un número de 1 a y Æ es la longitud de sucesión generada por . Por ejemplo,
  • 85. 5.6. Problema 3n + 1 85 ¹ ÐÓÒ ØÙ ×´ ¸Äµº Ä ½¹½¸ ¾¹¾¸ ¿¹ ¸ ¹¿¸ ¹ ℄ 3. Definir la relación ÐÓÒ ØÙ Ñ Ü´· ¸ ȵ que se verifica si È es un par de la forma ¹Æ donde es un número entre 1 y tal que la longitud de la sucesión generada por es la más larga de las sucesiones generadas por 1,2,. . . , y Æ es la longitud de dicha sucesión. Por ejemplo, ¹ ÐÓÒ ØÙ Ñ Ü´½¼¸Äµº Ä ¹¾¼ 4. Definir Ñ ÒÓÖ ÕÙ Ò Ö Ñ ÝÓÖ´·Æ¸¹Åµ que se verifique si Å es el menor número na- tural tal que la longitud de la sucesión generada por Å es mayor que Æ. Por ejemplo, ¹ Ñ ÒÓÖ ÕÙ Ò Ö Ñ ÝÓÖ´½¼¼¸Æµº Æ ¾ Solución: La relación ´· ¸¹ µ se verifica si ´ µ. ´ ¸ µ ¹ ÑÓ ¾ ¼¸ ¸ × »¾º ´ ¸ µ ¹ ± ÑÓ ¾ » ¼¸ × ¿¶ ·½º Solución del apartado 1: La definición de ×Ù × Ò es ×Ù × Ò´½¸ ½℄µ ¹ º ×Ù × Ò´ ¸ Ä℄µ ¹ ± » ½¸ ´ ¸ µ¸ ×Ù × Ò´ ¸Äµº Solución del apartado 2: Presentamos dos definiciones de ÐÓÒ ØÙ ×. La primera definición de ÐÓÒ ØÙ × es recursiva. ÐÓÒ ØÙ ×´ ¸Äµ ¹ ÐÓÒ ØÙ × ÙÜ´ ¸Ä½µ¸ Ö Ú Ö× ´Ä½¸Äµº ÐÓÒ ØÙ × ÙÜ´½¸ ½¹Æ℄µ ¹ ¸ ×Ù × Ò´½¸Äµ¸
  • 86. 86 Capítulo 5. Programación lógica de segundo orden Ð Ò Ø ´Ä¸Æµº ÐÓÒ ØÙ × ÙÜ´ ¸ ¹Æ Ä℄µ ¹ ± ½¸ ×Ù × Ò´ ¸Ä½µ¸ Ð Ò Ø ´Ä½¸Æµ¸ × ¹½¸ ÐÓÒ ØÙ × ÙÜ´ ¸Äµº La segunda definición de ÐÓÒ ØÙ ×, usando Ò ÐÐ, es ÐÓÒ ØÙ × ¾´ ¸Äµ ¹ Ò Ðд ¹Æ¸´ ØÛ Ò´½¸ ¸ µ¸×Ù × Ò´ ¸Ëµ¸Ð Ò Ø ´Ë¸Æµµ¸Äµº Solución del apartado 3: La definición de ÐÓÒ ØÙ Ñ Ü es ÐÓÒ ØÙ Ñ Ü´ ¸ ¹Æµ ¹ ÐÓÒ ØÙ ×´ ¸Äµ¸ Ñ Ñ Ö´ ¹Æ¸Äµ¸ · ´Ñ Ñ Ö´ ¹Å¸Äµ¸ ŠƵº Solución del apartado 4: La definición de Ñ ÒÓÖ ÕÙ Ò Ö Ñ ÝÓÖ es Ñ ÒÓÖ ÕÙ Ò Ö Ñ ÝÓִƸŵ ¹ Ñ ÒÓÖ ÕÙ Ò Ö Ñ ÝÓÖ ÙܴƸ½¸Åµº Ñ ÒÓÖ ÕÙ Ò Ö Ñ ÝÓÖ ÙܴƸŸŵ ¹ ×Ù × Ò´Å¸Äµ¸ Ð Ò Ø ´Ä¸ µ¸ Ƹ º Ñ ÒÓÖ ÕÙ Ò Ö Ñ ÝÓÖ ÙܴƸ ¸Åµ ¹ × ·½¸ Ñ ÒÓÖ ÕÙ Ò Ö Ñ ÝÓÖ ÙܴƸ ¸Åµº 5.7. Números perfectos En los ejercicio de esta sección estudiamos los números perfectos (es decir, iguales a la suma de sus divisores propios) y conceptos relacionados. Ejercicio 5.7 Definir la relación Ú ×ÓÖ × ÔÖÓÔ Ó×´·Æ¸¹Äµ que se verifique si Ä es la lista ordenada de los divisores propios del número Æ. Por ejemplo,
  • 87. 5.7. Números perfectos 87 ¹ Ú ×ÓÖ × ÔÖÓÔ Ó×´ ¾¸Äµº Ä ½¸ ¾¸ ¿¸ ¸ ¸ ½ ¸ ¾½℄ Solución: La definición de Ú ×ÓÖ × ÔÖÓÔ Ó× es Ú ×ÓÖ × ÔÖÓÔ Ó״Ƹĵ ¹ ƽ × Æ ¹½¸ Ò Ðд ¸´ ØÛ Ò´½¸Æ½¸ µ¸ ¼ Æ ÑÓ µ¸Äµº Ejercicio 5.8 Definir la relación ×ÙÑ Ú ×ÓÖ × ÔÖÓÔ Ó×´·Æ¸¹Ëµ que se verifique si Ë es la suma de los divisores propios del número Æ. Por ejemplo, ¹ ×ÙÑ Ú ×ÓÖ × ÔÖÓÔ Ó×´ ¾¸Ëµº Ë ¹ ×ÙÑ Ú ×ÓÖ × ÔÖÓÔ Ó×´½¸Ëµº Ë ¼ Solución: La definición de ×ÙÑ Ú ×ÓÖ × ÔÖÓÔ Ó× es ×ÙÑ Ú ×ÓÖ × ÔÖÓÔ Ó״Ƹ˵ ¹ Ú ×ÓÖ × ÔÖÓÔ Ó״Ƹĵ¸ ×ÙÑ Ð ×Ø ´Ä¸Ëµº La relación ×ÙÑ Ð ×Ø ´·Ä¸¹Æµ se verifica si Æ es la suma de los elementos de la lista Ä. ×ÙÑ Ð ×Ø ´ ℄¸¼µº ×ÙÑ Ð ×Ø ´ Ä℄¸Ëµ ¹ ×ÙÑ Ð ×Ø ´Ä¸Ë½µ¸ Ë × · ˽º Ejercicio 5.9 Clasificamos los números 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 relación Ø ÔÓ´·Æ¸¹Ì) que se verifique si Ì es el tipo del número Æ. Por ejemplo, ¹ Ø ÔÓ´½¼¸Ìµº Ì ¹ Ø ÔÓ´¾ ¸Ìµº Ì ¹ Ø ÔÓ´½¾¸Ìµº Ì
  • 88. 88 Capítulo 5. Programación lógica de segundo orden Solución: La definición de Ø ÔÓ es Ø ÔӴƸ̵ ¹ ×ÙÑ Ú ×ÓÖ × ÔÖÓÔ Ó״Ƹ˵¸ Ø ÔÓ ÙܴƸ˸̵º Ø ÔÓ ÙܴƸ˸ µ ¹ Æ Ë¸ º Ø ÔÓ ÙܴƸƸ µ ¹ º Ø ÔÓ ÙܴƸ˸ µº ± ¹ Æ Ëº Ejercicio 5.10 Definir la relación Ð × ´·Æ¸¹Äµ que se verifique si Ä es la lista de tipos de los números comprendidos entre 1 y Æ. Por ejemplo, ¹ Ð × ´¾¼¸Äµº Ä ¸ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ℄ Solución: La definición de Ð × es Ð × ´Æ¸Äµ ¹ Ò Ðд̸´ ØÛ Ò´½¸Æ¸ µ¸Ø ÔÓ´ ¸Ìµµ¸Äµº Ejercicio 5.11 Definir la relación ÔÖÓÑ Ó´·Æ¸¹ ¸¹ ¸¹ µ que se verifique si , y son las cantidades de números naturales menores o iguales que Æ de tipo a, b y c, respectivamente. Por ejemplo, ¹ ÔÖÓÑ Ó´¾¼¸ ¸ ¸ µº ½ ½ ¿ Solución: La definición de ÔÖÓÑ Ó es ÔÖÓÑ Ó´Æ¸ ¸ ¸ µ ¹ Ð × ´Æ¸Äµ¸ ÔÖÓÑ Ó Ùܴĸ ¸ ¸ µº ÔÖÓÑ Ó ÙÜ´ ℄¸¼¸¼¸¼µº ÔÖÓÑ Ó ÙÜ´ Ä℄¸ ½¸ ¸ µ ¹ ÔÖÓÑ Ó Ùܴĸ ¸ ¸ µ¸ ½ × ·½º ÔÖÓÑ Ó ÙÜ´ Ä℄¸ ¸ ½¸ µ ¹ ÔÖÓÑ Ó Ùܴĸ ¸ ¸ µ¸
  • 89. 5.8. Determinación de triángulos equiláteros 89 ½ × ·½º ÔÖÓÑ Ó ÙÜ´ Ä℄¸ ¸ ¸ ½µ ¹ ÔÖÓÑ Ó Ùܴĸ ¸ ¸ µ¸ ½ × ·½º Ejercicio 5.12 Definir la relación Ñ ÒÓÖ´·Æ¸¹ µ que se verifique si es el menor número tal que la cantidad de números naturales menores o iguales que de tipo a es Æ. Por ejemplo, ¹ Ñ ÒÓÖ´¾¼¸ µº ¾ Solución: La definición de Ñ ÒÓÖ es Ñ ÒÓִƸ µ ¹ Ñ ÒÓÖ ÙܴƸƸ µº Ñ ÒÓÖ ÙܴƸŸŵ ¹ ÔÖÓÑ Ó´Å¸Æ¸ ¸ µ¸ º Ñ ÒÓÖ ÙܴƸŸ µ ¹ Ž × Å·½¸ Ñ ÒÓÖ ÙܴƸޏ µº 5.8. Determinación de triángulos equiláteros Ejercicio 5.13 Un polígono se representa por su nombre y las longitudes de sus lados. Definir la relación × ÕÙ Ð Ø ÖÓ´·Èµ que se verifica si el polígono È es equilátero (es decir, que todos sus lados son iguales). Por ejemplo, ¹ × ÕÙ Ð Ø ÖÓ´ØÖ Ò ÙÐÓ´ ¸ ¸ µµº × ¹ × ÕÙ Ð Ø ÖÓ´ Ù Ö Ð Ø ÖÓ´¿¸ ¸ ¸¿µµº ÆÓ Solución: La definición de × ÕÙ Ð Ø ÖÓ es × ÕÙ Ð Ø ÖӴȵ ¹ È ºº Ä℄¸ ØÓ Ó× Ù Ð ×´Äµº La relación ØÓ Ó× Ù Ð × está definida en la página 19.
  • 90. 90 Capítulo 5. Programación lógica de segundo orden 5.9. Operación binaria aplicada a listas Ejercicio 5.14 Definir la relación ÓÔ Ö Ò Ð ×Ø ×´·Ç¸·Ä½¸·Ä¾¸¹Ä¿µ que se verifica si Ä¿ es la lista obtenida aplicando la operación binaria Ç a los elementos de Ľ y ľ que ocupan la misma posición. Por ejemplo, ¹ ÓÔ Ö Ò Ð ×Ø ´·¸ ½¸¾¸¿℄¸ ¸ ¸ ℄¸Äµº Ä ¸ ¸ ℄ ¹ ÓÔ Ö Ò Ð ×Ø ´¶¸ ½¸¾¸¿℄¸ ¸ ¸ ℄¸Äµº Ä ¸ ½¼¸ ½ ℄ Nota: Se supone que Ľ y ľ tienen la misma longitud) Solución: La definición de ÓÔ Ö Ò Ð ×Ø es ÓÔ Ö Ò Ð ×Ø ´ ¸ ℄¸ ℄¸ ℄µº ÓÔ Ö Ò Ð ×Ø ´Ç¸ ½ Ľ℄¸ ¾ ľ℄¸ ¿ Ä¿℄µ ¹ ºº Ǹ ½¸ ¾℄¸ ¿ × ¸ ÓÔ Ö Ò Ð ×Ø ´Ç¸Ä½¸Ä¾¸Ä¿µº 5.10. Números en un término Ejercicio 5.15 Definir la relación Ò Ñ ÖÓ×´·Ì¸¹Äµ que que se verifique si Ä es el conjunto de todos los números que ocurren en el término cerrado Ì. Por ejemplo, ¹ Ò Ñ ÖÓ×´ ´ ¸ ´ ¸ µ¸¾µ¸Äµº Ä ¸ ¾℄ ¹ Ò Ñ ÖÓ×´ ·¿· ¶´× Ò´¾µ·¿µ¸Äµº Ä ¾¸ ¿℄ ¹ Ò Ñ ÖÓ×´ · ¸Äµº Ä ℄ Solución: La definición de Ò Ñ ÖÓ× es Ò Ñ ÖÓ״̸ Ì℄µ ¹ ÒÙÑ Ö´Ìµ¸ º Ò Ñ ÖÓ״̸ĵ ¹ ± ÒÓØ´ÒÙÑ Ö´Ìµµ¸ Ì ºº Ľ℄¸ Ò Ñ ÖÓ× Ð ×Ø ´Ä½¸Äµº
  • 91. 5.11. Palabra sin vocales 91 La relación Ò Ñ ÖÓ× Ð ×Ø ´·Ä½¸¹Ä¾µ se verifica si ľ es el conjunto de números en la lista de términos Ľ. Por ejemplo, ¹ Ò Ñ ÖÓ× Ð ×Ø ´ ·¿¸ ¶´× Ò´¾µ·¿µ℄¸Äµº Ä ¾¸ ¿℄ La definición de Ò Ñ ÖÓ× Ð ×Ø es Ò Ñ ÖÓ× Ð ×Ø ´ ℄¸ ℄µº Ò Ñ ÖÓ× Ð ×Ø ´ Ì Ä½℄¸Ä¾µ ¹ Ò Ñ ÖÓ״̸Ŀµ¸ Ò Ñ ÖÓ× Ð ×Ø ´Ä½¸Ä µ¸ ÙÒ ÓÒ´Ä¿¸Ä ¸Ä¾µº 5.11. Palabra sin vocales Ejercicio 5.16 Definir la relación Ð Ñ Ò ÚÓ Ð ×´·È½¸¹È¾µ que se verifique si Ⱦ es la palabra que se obtiene al eliminar todas las vocales de la palabra Ƚ. Por ejemplo, ¹ Ð Ñ Ò ÚÓ Ð ×´× Ú ÐÐ ÒӸȵº È ×ÚÐÐÒ Solución: La definición de Ð Ñ Ò ÚÓ Ð × es Ð Ñ Ò ÚÓ Ð ×´È½¸È¾µ ¹ Ò Ñ ´È½¸Ä½µ¸ Ó× ÚÓ Ð ×´Äµ¸ Ò ÐдƸ´Ñ Ñ Ö´Æ¸Ä½µ¸ÒÓØ´Ñ Ñ Ö´Æ¸Äµµµ¸Ä¾µ¸ Ò Ñ ´È¾¸Ä¾µº La relación Ó× ÚÓ Ð ×´ ĵ se verifica si Ä es la lista de los códigos ASCII de las vocales. Ó× ÚÓ Ð ×´Äµ ¹ Ò Ñ ´ Óٸĵº 5.12. Palabras maximales Ejercicio 5.17 Definir la relación ÐÓÒ ØÙ ´·È¸¹Æµ que se verifique si Æ es la longitud de la palabra È. Por ejemplo,
  • 92. 92 Capítulo 5. Programación lógica de segundo orden ¹ ÐÓÒ ØÙ ´ Ò ¸Æµº Æ ¿ Solución: La definición de ÐÓÒ ØÙ es ÐÓÒ ØÙ ´È¸Æµ ¹ Ò Ñ ´È¸Äµ¸ Ð Ò Ø ´Ä¸Æµº Ejercicio 5.18 Definir la relación Ô Ð Ö Ñ Ü Ñ Ð´·Ä¸¹Èµ que se verifique si È es una pala- bra maximal (es decir, de máxima longitud) de la lista de palabras Ä. Por ejemplo, ¹ Ô Ð Ö Ñ Ü Ñ Ð´ Ú ¸Ý¸ Ò ¸× ¸Ú Ò℄¸Èµº È Ú È Ò È Ú Ò ÆÓ Solución: La definición de Ô Ð Ö Ñ Ü Ñ Ð es Ô Ð Ö Ñ Ü Ñ Ð´Ä¸Èµ ¹ × Ð Ø´È¸Ä¸Êµ¸ ÐÓÒ ØÙ ´È¸Æµ¸ ÒÓØ´´Ñ Ñ Ö´È½¸Êµ¸ ÐÓÒ ØÙ ´È½¸Æ½µ¸ Æ Æ½µµº Ejercicio 5.19 Definir la relación Ô Ð Ö × Ñ Ü Ñ Ð ×´·Ä½¸¹Ä¾µ que se verifique si ľ es la lista de las palabras maximales de la lista de palabras Ľ. Por ejemplo, ¹ Ô Ð Ö × Ñ Ü Ñ Ð ×´ Ú ¸Ý¸ Ò ¸× ¸Ú Ò℄¸Äµº Ä Ú ¸ Ò ¸ Ú Ò℄ Solución: La definición de Ô Ð Ö × Ñ Ü Ñ Ð × es Ô Ð Ö × Ñ Ü Ñ Ð ×´Ä½¸Ä¾µ ¹ Ò ÐÐ´È¸Ô Ð Ö Ñ Ü Ñ Ð´Ä½¸Èµ¸Ä¾µº 5.13. Clausura transitiva de una relación Ejercicio 5.20 La clausura transitiva de una relación binaria R es la menor relación 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 clau- sura transitiva de la relación Ê. Por ejemplo, suponiendo que se han definido las relaciones Ô y Õ por
  • 93. 5.14. Traducción de cifras a palabras 93 Ô´ ¸ µº Ô´ ¸ µº Õ´ ¸ µº Õ´ ¸ µº se tiene ¹ Ð Ù×ÙÖ ØÖ Ò× Ø Ú ´Ô¸ ¸ µº ÆÓ ¹ Ð Ù×ÙÖ ØÖ Ò× Ø Ú ´Õ¸ ¸ µº ÆÓ Solución: La definición de Ð Ù×ÙÖ ØÖ Ò× Ø Ú es Ð Ù×ÙÖ ØÖ Ò× Ø Ú ´Ê¸ ¸ µ ¹ ÔÔÐݴʸ ¸ ℄µº Ð Ù×ÙÖ ØÖ Ò× Ø Ú ´Ê¸ ¸ µ ¹ ÔÔÐݴʸ ¸ ℄µ¸ Ð Ù×ÙÖ ØÖ Ò× Ø Ú ´Ê¸ ¸ µº 5.14. Traducción de cifras a palabras Ejercicio 5.21 Definir la relación ØÖ Ù Ò´·Ä½¸¹Ä¾µ que se verifique si ľ es la lista de palabras correspondientes a los dígitos de la lista Ľ. Por ejemplo, ¹ ØÖ Ù Ò´ ½¸¿℄¸Äµº Ä ÙÒÓ¸ ØÖ ×℄ (Indicación: Usar la relación auxiliar ÒÓÑ Ö ´ ¸Æµ que se verifica si Æ es el nombre del dígito ). Solución: La definición de la relación auxiliar ÒÓÑ Ö es
  • 94. 94 Capítulo 5. Programación lógica de segundo orden ÒÓÑ Ö ´¼¸ ÖÓµº ÒÓÑ Ö ´½¸ÙÒÓµº ÒÓÑ Ö ´¾¸ Ó×µº ÒÓÑ Ö ´¿¸ØÖ ×µº ÒÓÑ Ö ´ ¸ Ù ØÖÓµº ÒÓÑ Ö ´ ¸ Ò Óµº ÒÓÑ Ö ´ ¸× ×µº ÒÓÑ Ö ´ ¸× Ø µº ÒÓÑ Ö ´ ¸Ó Óµº ÒÓÑ Ö ´ ¸ÒÙ Ú µº Se presentan tres definiciones de ØÖ Ù Ò. Primera solución: Una definición de ØÖ ٠ҴĽ¸Ä¾µ, por recursión en Ľ, es ØÖ Ù Ò ½´ ℄¸ ℄µº ØÖ Ù Ò ½´ Ľ℄¸ Æ Ä¾℄µ ¹ ÒÓÑ Ö ´ ¸Æµ¸ ØÖ Ù Ò ½´Ä½¸Ä¾µº Segunda solución: Una definición de ØÖ Ù Ò usando Ò ÐÐ es ØÖ Ù Ò ¾´Ä½¸Ä¾µ ¹ Ò ÐдƸ´Ñ Ñ Ö´ ¸Ä½µ¸ÒÓÑ Ö ´ ¸Æµµ¸Ä¾µº Tercera solución: Una definición de ØÖ Ù Ò usando Ñ ÔÐ ×Ø es ØÖ Ù Ò ¿´Ä½¸Ä¾µ ¹ Ñ ÔÐ ×Ø´ÒÓÑ Ö ¸Ä½¸Ä¾µº 5.15. Transformación de lista dependiente de la posición Ejercicio 5.22 Definir la relación ØÖ Ò× ÓÖÑ ´·Ä½¸¹Ä¾µ que se verifique si ľ es la lista obte- nida sumándole a cada elemento numérico de Ľ su posición en la lista. Por ejemplo, ¹ ØÖ Ò× ÓÖÑ ´ ½¸½¸½¸ ¸ ¸ ¸½¸½¸½℄¸Äµº Ä ¾¸ ¿¸ ¸ ¸ ¸ ¸ ¸ ¸ ½¼℄ ¹ ØÖ Ò× ÓÖÑ ´ ½¸¾¸ ¸ ¸¾¸ ¸¿¸½℄¸Äµº Ä ¾¸ ¸ ¸ ¸ ¸ ¸ ½¼¸ ℄ Dar dos definiciones, una recursiva y otra no–recursiva.
  • 95. 5.15. Transformación de lista dependiente de la posición 95 Solución: La definición de recursiva de ØÖ Ò× ÓÖÑ es ØÖ Ò× ÓÖÑ ´Ä½¸Ä¾µ ¹ ØÖ Ò× ÓÖÑ ÙܴĽ¸½¸Ä¾µº donde ØÖ Ò× ÓÖÑ ÙÜ´·Ä½¸·Æ¸¹Ä¾µ se verifica si ľ es la lista obtenida añadiéndole a cada elemento numérico de Ľ la suma de Æ y su posición en la lista. Por ejemplo, ØÖ Ò× ÓÖÑ ÙÜ´ ℄¸ ¸ ℄µº ØÖ Ò× ÓÖÑ ÙÜ´ Ľ℄¸Æ¸ ľ℄µ ¹ ÒÙÑ Ö´ µ¸ ¸ × ·Æ¸ ƽ × Æ·½¸ ØÖ Ò× ÓÖÑ ÙܴĽ¸Æ½¸Ä¾µº ØÖ Ò× ÓÖÑ ÙÜ´ Ľ℄¸Æ¸ ľ℄µ ¹ ± ÒÓØ´ÒÙÑ Ö´ µµ¸ ƽ × Æ·½¸ ØÖ Ò× ÓÖÑ ÙܴĽ¸Æ½¸Ä¾µº La definición no recursiva de ØÖ Ò× ÓÖÑ es ØÖ Ò× ÓÖÑ ¾´Ä½¸Ä¾µ ¹ Ð ×Ø ÔÓ× ÓÒ ×´Ä½¸Äµ¸ Ñ ÔÐ ×Ø´×ÙÑ ¸Ä½¸Ä¸Ä¾µº donde Ð ×Ø ÔÓ× ÓÒ ×´·Ä½¸¹Ä¾µ se verifica si ľ es la lista de posiciones corres- pondiente a la lista Ľ. Por ejemplo, ¹ Ð ×Ø ÔÓ× ÓÒ ×´ ½¸½¸½¸ ¸ ¸ ¸½¸½¸½℄¸Äµº Ä ½¸ ¾¸ ¿¸ ¸ ¸ ¸ ¸ ¸ ℄ Ð ×Ø ÔÓ× ÓÒ ×´Ä½¸Ä¾µ ¹ Ð Ò Ø ´Ä½¸Æµ¸ Ò Ðд ¸ ØÛ Ò´½¸Æ¸ µ¸Ä¾µº y ×ÙÑ ´· ¸· ¸¹ µ se verifica si es la suma de y el número , cuando es un número y es igual a , en caso contrario. Por ejemplo, ¹ ×ÙÑ ´¿¸¾¸ µº ¹ ×ÙÑ ´ ¸¾¸ µº
  • 96. 96 Capítulo 5. Programación lógica de segundo orden ×ÙÑ ´ ¸ ¸ µ ¹ ÒÙÑ Ö´ µ¸ ¸ × · º ×ÙÑ ´ ¸ ¸ µº 5.16. Aplanamiento de listas Ejercicio 5.23 Definir la relación ÔÐ Ò ´·Ä½¸ ľµ que se verifique si ľ es la lista obtenida reemplazando, recursivamente, cada lista de Ľ por sus elementos. Por ejemplo, ¹ ÔÐ Ò ´ ¸ ¸ ℄℄¸ ℄¸ ℄℄¸Äµº Ä ¸ ¸ ¸ ¸ ℄ Solución: Para definir ÔÐ Ò ´ ¸ µ vamos a generalizar su dominio de forma que si no es una lista, entonces es la lista cuyo único elemento es . ÔÐ Ò ´ ¸ ℄µ ¹ · × Ð ×Ø´ µº ÔÐ Ò ´ ℄¸ ℄µº ÔÐ Ò ´ Ľ℄¸Ä¾µ ¹ ÔÐ Ò ´ ¸Ä¿µ¸ ÔÐ Ò ´Ä½¸Ä µ¸ ÔÔ Ò ´Ä¿¸Ä ¸Ä¾µº
  • 97. Capítulo 6 Estilo y eficiencia en programación lógica 6.1. Número de Hardy En cierta ocasión, el matemático Ramanujan estaba en un hospital en Inglaterra y su amigo Hardy fue a visitarlo. Hardy comentó que había llegado al hospital en un taxi de matrícula N y esperaba que éste no fuese un mal presagio, ya que N era un número 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 sección es averiguar la matrícula del taxi que llevó a Hardy a visitar a Ramanujan. Ejercicio 6.1 Definir la relación × Ù Ó´·Æµ que se verifique si Æ es el cubo de un entero. Por ejemplo, ¹ × Ù Ó ½´½¼¼¼µº × ¹ × Ù Ó ½´½¼¼½µº ÆÓ Solución: Presentaremos distintas definiciones y comentaremos su eficiencia. La primera solución realiza una búsqueda desde 1 hasta N. × Ù Ó ½´Æµ ¹ ØÛ Ò´½¸Æ¸ µ¸ Æ × ¶ ¶ º La segunda solución realiza una búsqueda desde 1 hasta 3 √ N. 97
  • 98. 98 Capítulo 6. Estilo y eficiencia en programación lógica × Ù Ó ¾´Æµ ¹ ÓØ × ÖÓÙÒ ´Æ ´½»¿µµ¸ ØÛ Ò´½¸ ÓØ ¸ µ¸ Æ × ¶ ¶ º La tercera solución utiliza predicados aritméticos predefinidos. × Ù Ó ¿´Æµ ¹ Æ ÖÓÙÒ ´Æ ¶¶ ´½»¿µµ ¶¶ ¿º Para comparar la eficiencia realizamos los siguientes experimentos: ¹ Ø Ñ ´ × Ù Ó ½´½¼¼¼¼¼½µµº ± ½¸¼¼¼¸¼¼¿ Ò Ö Ò ×¸ ½º¾¿ ÈÍ Ò ½º¾ × ÓÒ × ´ ± È͸ ½¿¼½½ Ä Ô×µ ÆÓ ¹ Ø Ñ ´ × Ù Ó ¾´½¼¼¼¼¼½µµº ± ½¼¿ Ò Ö Ò ×¸ ¼º¼¼ ÈÍ Ò ¼º¼¼ × ÓÒ × ´¼± È͸ ÁÒ Ò Ø Ä Ô×µ ÆÓ ¹ Ø Ñ ´ × Ù Ó ¿´½¼¼¼¼¼½µµº ± ¿ Ò Ö Ò ×¸ ¼º¼¼ ÈÍ Ò ¼º¼¼ × ÓÒ × ´¼± È͸ ÁÒ Ò Ø Ä Ô×µ ÆÓ Se observa que la más eficiente es la tercera definición. La segunda se aproxima a la segunda. La primera es muy ineficiente. En lo que sigue adoptaremos la tercera como definicón de × Ù Ó. × Ù Ó´Æµ ¹ × Ù Ó ¿´Æµº Ejercicio 6.2 Definir la relación × ÓÑÔÓÒ ´·Æ¸¹ ¸¹ µ que se verifique si e son dos cubos cuya suma es Æ y, además, es menor o igual que . Por ejemplo, ¹ × ÓÑÔÓÒ ´½¼¼ ¸ ¸ µº ½¼¼¼ ÆÓ Solución: Presentaremos distintas definiciones y comentaremos su eficiencia. La primera definición realiza una búsqueda en e .
  • 99. 6.1. Número de Hardy 99 × ÓÑÔÓÒ ½´Æ¸ ¸ µ ¹ ØÛ Ò´½¸Æ¸ µ¸ ØÛ Ò´½¸Æ¸ µ¸ × Ù Ó´ µ¸ × Ù Ó´ µ¸ ¸ Æ × · º La segunda definición realiza la búsqueda en y determina . × ÓÑÔÓÒ ¾´Æ¸ ¸ µ ¹ ØÛ Ò´½¸Æ¸ µ¸ × Ù Ó´ µ¸ × Æ ¹ ¸ ¸ × Ù Ó´ µº La tercera definición realiza una búsqueda acotada. × ÓÑÔÓÒ ¿´Æ¸ ¸ µ ¹ ÓØ × ÖÓÙÒ ´´Æ»¾µ ´½»¿µµ¸ ØÛ Ò´½¸ ÓØ ¸Åµ¸ × Å¶Å¶Å¸ × Æ¹ ¸ ¸ × Ù Ó´ µº Para comparar la eficiencia realizamos los siguientes experimentos: ¹ Ø Ñ ´ × ÓÑÔÓÒ ½´½ ¼ ¸ ¸ µµº ± ½½¸ ¿¾¸ Ò Ö Ò ×¸ º ÈÍ Ò º ½ × ÓÒ × ´½¼¼± È͸ ½ ¼¼¿ Ä Ô×µ ÆÓ ¹ Ø Ñ ´ × ÓÑÔÓÒ ¾´½ ¼ ¸ ¸ µµº ± ¸ ¼ Ò Ö Ò ×¸ ¼º¼½ ÈÍ Ò ¼º¼½ × ÓÒ × ´½½¾± È͸ ¼¼¼ Ä Ô×µ ÆÓ ¹ Ø Ñ ´ × ÓÑÔÓÒ ¿´½ ¼ ¸ ¸ µµº ± Ò Ö Ò ×¸ ¼º¼¼ ÈÍ Ò ¼º¼¼ × ÓÒ × ´¼± È͸ ÁÒ Ò Ø Ä Ô×µ ÆÓ ¹ Ø Ñ ´ × ÓÑÔÓÒ ½´¾¿¿½¸ ¸ µµº
  • 100. 100 Capítulo 6. Estilo y eficiencia en programación lógica ± ¸ ½¼¸ Ò Ö Ò ×¸ º¿½ ÈÍ Ò º¿¿ × ÓÒ × ´½¼¼± È͸ ½ ½¿ ¿ Ä Ô×µ ½¼¼¼ ½¿¿½ × ¹ Ø Ñ ´ × ÓÑÔÓÒ ¾´¾¿¿½¸ ¸ µµº ± ¸¼ ¾ Ò Ö Ò ×¸ ¼º¼½ ÈÍ Ò ¼º¼½ × ÓÒ × ´½ ± È͸ ¼ ¾¼¼ Ä Ô×µ ½¼¼¼ ½¿¿½ × ¹ Ø Ñ ´ × ÓÑÔÓÒ ¿´¾¿¿½¸ ¸ µµº ± ¿ Ò Ö Ò ×¸ ¼º¼¼ ÈÍ Ò ¼º¼¼ × ÓÒ × ´¼± È͸ ÁÒ Ò Ø Ä Ô×µ ½¼¼¼ ½¿¿½ × Se observa que la más eficiente es la tercera definición. En lo que sigue adoptaremos la tercera como definición de × ÓÑÔÓÒ . × ÓÑÔÓÒ ´Æ¸ ¸ µ ¹ × ÓÑÔÓÒ ¿´Æ¸ ¸ µº Ejercicio 6.3 Definir la relación Ö Ñ ÒÙ Ò´·Æµ que se verifique si Æ puede descomponerse en suma de dos cubos exactamente de dos maneras distintas. Solución: La definición de Ö Ñ ÒÙ Ò es Ö Ñ Ò٠ҴƵ ¹ × ØÓ ´Ô Ö´ ¸ µ¸ × ÓÑÔÓÒ ´Æ¸ ¸ µ¸ ¸ ℄µº Ejercicio 6.4 Definir la relación Ö Ý´¹Æµ que se verifique si Æ es el menor entero positivo que satisface el predicado Ö Ñ ÒÙ Ò anterior. ¿Cuál es la la matrícula del taxi que llevó a Hardy a visitar a Ramanujan? Solución: La definición de Ö Ý es Ö Ý´Æµ ¹ Ö Ý ÙܴƸ½µº Ö Ý ÙܴƸƵ ¹ Ö Ñ Ò٠ҴƵ¸ º Ö Ý ÙܴƸŵ ¹ Ž × Å·½¸ Ö Ý ÙܴƸ޵º
  • 101. 6.2. Subconjuntos de suma dada 101 La matrícula del taxi que llevó a Hardy a visitar a Ramanujan se calcula mediante la siguiente consulta ¹ Ö Ý´Æµº Æ ½ ¾ Por tanto, la matrícula del taxi es 1729. 6.2. Subconjuntos de suma dada Ejercicio 6.5 Definir la relación ×Ù ÓÒ ÙÒØÓ ×ÙÑ ´·Ä½¸·Æ¸ ľµ que se verifique si ľ es un subconjunto de Ľ tal que la suma de los elementos de ľ es Æ. Por ejemplo, ¹ ×Ù ÓÒ ÙÒØÓ ×ÙÑ ´ ½¼¸ ¸¿¸ ¸¾¸½℄¸ ¸Äµº Ä ℄ Ä ¿¸ ℄ Ä ¸ ¾¸ ½℄ ÆÓ ¹ ×Ù ÓÒ ÙÒØÓ ×ÙÑ ´ ½¸¾¸¿℄¸¼¸Äµº Ä ℄ ÆÓ Solución: Presentaremos cuatro definiciones y comparemos su eficiencia. La primera definición usa la relación ×Ù ÓÒ ÙÒØÓ definida en el ejercicio 1.17 (pá- gina 20). ×Ù ÓÒ ÙÒØÓ ×ÙÑ ½´Ä½¸Æ¸Ä¾µ ¹ ×Ù ÓÒ ÙÒØÓ´Ä½¸Ä¾µ¸ ×ÙÑÐ ×Ø´Ä¾¸Æµº En la segunda definición se adapta la definición de ×Ù ÓÒ ÙÒØÓ teniendo en cuenta la suma de sus elementos. ×Ù ÓÒ ÙÒØÓ ×ÙÑ ¾´ ℄¸¼¸ ℄µº ×Ù ÓÒ ÙÒØÓ ×ÙÑ ¾´ Ľ℄¸Æ¸ ľ℄µ ¹ Æ ¸ ƽ × Æ¹ ¸ ×Ù ÓÒ ÙÒØÓ ×ÙÑ ¾´Ä½¸Æ½¸Ä¾µº ×Ù ÓÒ ÙÒØÓ ×ÙÑ ¾´ Ľ℄¸Æ¸Ä¾µ ¹ ×Ù ÓÒ ÙÒØÓ ×ÙÑ ¾´Ä½¸Æ¸Ä¾µº
  • 102. 102 Capítulo 6. Estilo y eficiencia en programación lógica En la tercera definición se define de forma dinámica la relación ×Ù ÓÒ ÙÒØÓ×´·Ä½¸·Æº¹Ëµ que se verifica si Ë es la lista de subconjuntos de Ë tales que la suma de sus elementos es Æ. ¹ ÝÒ Ñ ×Ù ÓÒ ÙÒØÓ× ×ÙÑ Ð ÙÐ Ó× ¿»¿º ×Ù ÓÒ ÙÒØÓ ×ÙÑ ¿´Ä½¸Æ¸Ä¾µ ¹ ×Ù ÓÒ ÙÒØÓ× ×ÙÑ Ð ÙÐ Ó× ¿´Ä½¸Æ¸Ëµ¸ ¸ Ñ Ñ Ö´Ä¾¸Ëµº ×Ù ÓÒ ÙÒØÓ ×ÙÑ ¿´Ä½¸Æ¸Ä¾µ ¹ Ò Ðдĸ×Ù ÓÒ ÙÒØÓ ×ÙÑ ¿ ÙܴĽ¸Æ¸Äµ¸Ëµ¸ ×× ÖØ ´×Ù ÓÒ ÙÒØÓ× ×ÙÑ Ð ÙÐ Ó× ¿´Ä½¸Æ¸Ëµµ¸ Ñ Ñ Ö´Ä¾¸Ëµº ×Ù ÓÒ ÙÒØÓ ×ÙÑ ¿ ÙÜ´ ℄¸¼¸ ℄µº ×Ù ÓÒ ÙÒØÓ ×ÙÑ ¿ ÙÜ´ Ľ℄¸Æ¸ ľ℄µ ¹ Æ ¸ ƽ × Æ¹ ¸ ×Ù ÓÒ ÙÒØÓ ×ÙÑ ¿´Ä½¸Æ½¸Ä¾µº ×Ù ÓÒ ÙÒØÓ ×ÙÑ ¿ ÙÜ´ Ľ℄¸Æ¸Ä¾µ ¹ ×Ù ÓÒ ÙÒØÓ ×ÙÑ ¿´Ä½¸Æ¸Ä¾µº La cuarta definición es una variación 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 Æ. ¹ ÝÒ Ñ ×Ù ÓÒ ÙÒØÓ× ×ÙÑ Ð ÙÐ Ó× »¿º ×Ù ÓÒ ÙÒØÓ ×ÙÑ ´Ä½¸Æ¸Ä¾µ ¹ ×Ù ÓÒ ÙÒØÓ× ×ÙÑ Ð ÙÐ Ó× ´Æ¸Ä½¸Ëµ¸ ¸ Ñ Ñ Ö´Ä¾¸Ëµº ×Ù ÓÒ ÙÒØÓ ×ÙÑ ´Ä½¸Æ¸Ä¾µ ¹ Ò Ðдĸ×Ù ÓÒ ÙÒØÓ ×ÙÑ ÙܴĽ¸Æ¸Äµ¸Ëµ¸ ×× ÖØ ´×Ù ÓÒ ÙÒØÓ× ×ÙÑ Ð ÙÐ Ó× ´Æ¸Ä½¸Ëµµ¸ Ñ Ñ Ö´Ä¾¸Ëµº ×Ù ÓÒ ÙÒØÓ ×ÙÑ ÙÜ´ ℄¸¼¸ ℄µº ×Ù ÓÒ ÙÒØÓ ×ÙÑ ÙÜ´ Ľ℄¸Æ¸ ľ℄µ ¹ Æ ¸ ƽ × Æ¹ ¸ ×Ù ÓÒ ÙÒØÓ ×ÙÑ ´Ä½¸Æ½¸Ä¾µº
  • 103. 6.3. Coloreado de mapas 103 ×Ù ÓÒ ÙÒØÓ ×ÙÑ ÙÜ´ Ľ℄¸Æ¸Ä¾µ ¹ ×Ù ÓÒ ÙÒØÓ ×ÙÑ ´Ä½¸Æ¸Ä¾µº Para comparar la eficiencia se realizan los siguientes experimentos. ¹ ÒÙÑÐ ×Ø´½¸¾¼¸ Ľµ¸ Ø Ñ ´ Ò Ðдĸ×Ù ÓÒ ÙÒØÓ ×ÙÑ ½´ Ľ¸½¼¸Äµ¸ ˵µº ± ¾ ¸½ ¸ Ò Ö Ò ×¸ º¼ ÈÍ Ò º½ × ÓÒ × ¹ ÒÙÑÐ ×Ø´½¸¾¼¸ Ľµ¸ Ø Ñ ´ Ò Ðдĸ×Ù ÓÒ ÙÒØÓ ×ÙÑ ¾´ Ľ¸½¼¸Äµ¸ ˵µº ± ½¸ Ò Ö Ò ×¸ ¼º¼¼ ÈÍ Ò ¼º¼¼ × ÓÒ × ¹ ÒÙÑÐ ×Ø´½¸¾¼¸ Ľµ¸ Ø Ñ ´ Ò Ðдĸ×Ù ÓÒ ÙÒØÓ ×ÙÑ ¿´ Ľ¸½¼¸Äµ¸ ˵µº ± ¿¸¾ ¾ Ò Ö Ò ×¸ ¼º¼½ ÈÍ Ò ¼º¼½ × ÓÒ × ¹ ÒÙÑÐ ×Ø´½¸¾¼¸ Ľµ¸ Ø Ñ ´ Ò Ðдĸ×Ù ÓÒ ÙÒØÓ ×ÙÑ ´ Ľ¸½¼¸Äµ¸ ˵µº ± ¿¸¾ ¾ Ò Ö Ò ×¸ ¼º¼½ ÈÍ Ò ¼º¼½ × ÓÒ × ¹ ÒÙÑÐ ×Ø´½¸½ ¼¸ Ľµ¸ Ø Ñ ´ Ò Ðдĸ×Ù ÓÒ ÙÒØÓ ×ÙÑ ¾´ Ľ¸ ¼¸Äµ¸ ˵µº ± ½¼ ¸ ¸ Ò Ö Ò ×¸ º ¼ ÈÍ Ò º × ÓÒ × ¹ ÒÙÑÐ ×Ø´½¸½ ¼¸ Ľµ¸ Ø Ñ ´ Ò Ðдĸ×Ù ÓÒ ÙÒØÓ ×ÙÑ ¿´ Ľ¸ ¼¸Äµ¸ ˵µº ± ¿¸½¾¾ Ò Ö Ò ×¸ ½ º ½ ÈÍ Ò ¾½º × ÓÒ × ¹ ÒÙÑÐ ×Ø´½¸½ ¼¸ Ľµ¸ Ø Ñ ´ Ò Ðдĸ×Ù ÓÒ ÙÒØÓ ×ÙÑ ´ Ľ¸ ¼¸Äµ¸ ˵µº ± ¿¸½ Ò Ö Ò ×¸ ½º ÈÍ Ò ¾º½ × ÓÒ × Se observa que la más eficiente es la cuarta definición. 6.3. Coloreado de mapas Ejercicio 6.6 Un mapa puede representarse mediante la relación Ñ Ô ´Æ¸Äµ donde Æ es el nom- bre del 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 Ñ Ô ´ ÑÔÐÓ ½¸ ¹ ¸ ¸ ℄¸ ¹ ¸ ¸ ℄¸ ¹ ¸ ¸ ℄¸ ¹ ¸ ¸ ¸ ¸ ¸ ℄¸ ¹ ¸ ¸ ℄¸ ¹ ¸ ¸ ℄¸ ¹ ¸ ¸ ℄℄µº Ñ Ô ´ ÑÔÐÓ ¾¸ ¹ ¸ ¸ ℄¸ ¹ ¸ ¸ ¸ ℄¸ ¹ ¸ ¸ ¸ ℄¸ ¹ ¸ ¸ ℄¸ ¹ ¸ ¸ ¸ ℄¸ ¹ ¸ ¸ ¸ ℄¸ ¹ ¸ ¸ ℄¸ ¹ ¸ ¸ ℄¸ ¹ ¸ ¸ ℄¸ ¹ ¸ ¸ ℄¸ ¹ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ¸ ℄℄µº
  • 104. 104 Capítulo 6. Estilo y eficiencia en programación lógica c d a b e f g a b c d e f g h i j k Figura 6.1: Ejemplos de mapas Definir la relación ÓÐÓÖ Ò´·Å¸·Ä ¸¹Ëµ que se verifique si Ë es una lista de pares formados por una región del mapa Å y uno de los colores de la lista de colores Ä tal que las regiones vecinas tengan colores distintos. Por ejemplo, ¹ ÓÐÓÖ Ò´ ÑÔÐÓ ½¸ ½¸¾¸¿℄¸Ëµº Ë ¹½¸ ¹¾¸ ¹¾¸ ¹¿¸ ¹½¸ ¹½¸ ¹¾℄ ¿Qué número de colores se necesitan para colorear el segundo mapa? ¿De cuántas formas dis- tintas puede colorearse con dicho número? Solución: Presentamos dos definiciones y comparamos su eficiencia. La primera definición de ÓÐÓÖ Ò es por generación y prueba. ÓÐÓÖ Ò ½´Å¸Ä ¸Ëµ ¹ Ñ Ô ´Å¸Äµ¸ ÓÐÓÖ Ò ½ ÙÜ´Ä¸Ä ¸Ëµº ÓÐÓÖ Ò ½ ÙÜ´ ℄¸ ¸ ℄µº ÓÐÓÖ Ò ½ ÙÜ´ ʹΠÄ℄¸Ä ¸ ʹ Ë℄µ ¹ Ñ Ñ Ö´ ¸Ä µ¸ ÓÐÓÖ Ò ½ ÙÜ´Ä¸Ä ¸Ëµ¸ ÒÓØ´´Ñ Ñ Ö´Ê½¸Îµ¸ Ñ Ñ Ö´Ê½¹ ¸Ëµµµº En la segunda definición de ÓÐÓÖ Ò se usa un acumulador y se adelanta las pruebas. ÓÐÓÖ Ò ¾´Å¸Ä ¸Ëµ ¹ Ñ Ô ´Å¸Äµ¸ ÓÐÓÖ Ò ¾ ÙÜ´Ä¸Ä ¸ ℄¸Ëµº ÓÐÓÖ Ò ¾ ÙÜ´ ℄¸ ¸Ë¸Ëµº
  • 105. 6.3. Coloreado de mapas 105 ÓÐÓÖ Ò ¾ ÙÜ´ ʹΠÄ℄¸Ä ¸ ¸Ëµ ¹ Ñ Ñ Ö´ ¸Ä µ¸ ÒÓØ´´Ñ Ñ Ö´Ê½¸Îµ¸ Ñ Ñ Ö´Ê½¹ ¸ µµµ¸ ÓÐÓÖ Ò ¾ ÙÜ´Ä¸Ä ¸ ʹ ℄¸Ëµº Para comparar las dos definiciones usaremos el segundo mapa. ¹ Ø Ñ ´ ÓÐÓÖ Ò ½´ ÑÔÐÓ ¾¸ ½¸¾¸¿¸ ℄¸Ëµµº ± ½ ¸ ¼ ¸¿½ Ò Ö Ò ×¸ º½ ÈÍ Ò º¾¼ × ÓÒ × ´½¼¼± È͸ ¾ ¼¿½¾ Ä Ô×µ Ë ¹½¸ ¹¾¸ ¹½¸ ¹¾¸ ¹¿¸ ¹¿¸ ¹½¸ ¹½¸ ¹¾¸ ¹¿¸ ¹ ℄ ¹ Ø Ñ ´ ÓÐÓÖ Ò ¾´ ÑÔÐÓ ¾¸ ½¸¾¸¿¸ ℄¸Ëµµº ± Ò Ö Ò ×¸ ¼º¼¼ ÈÍ Ò ¼º¼¼ × ÓÒ × ´¼± È͸ ÁÒ Ò Ø Ä Ô×µ Ë ¹ ¸ ¹¿¸ ¹¾¸ ¹½¸ ¹½¸ ¹¿¸ ¹¿¸ ¹¾¸ ¹½¸ ¹¾¸ ¹½℄ Se observa que la segunda es más 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 número Æ de formas distintas de colorear el segundo mapa se calcula mediante la siguiente consulta. ¹ Ò Ðд ˸ ÓÐÓÖ Ò ¾´ ÑÔÐÓ ¾¸ ½¸¾¸¿¸ ℄¸ ˵¸ ĵ¸ Ð Ò Ø ´ ĸƵº Æ ½¼¿¾
  • 106. 106 Capítulo 6. Estilo y eficiencia en programación lógica
  • 107. Capítulo 7 Aplicaciones de programación declarativa 7.1. Formación de grupos minimales de asignaturas com- patibles Mediante la relación Ð ×Ø Ð × ´ ¸ ¸Äµ se representa la información de los alumnos según 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 información. Ð ×Ø Ð × ´ ½¸ × ½¸ ½¸ ℄µº Ð ×Ø Ð × ´ ½¸ × ¾¸ ½¸ ¾¸ ¿℄µº Ð ×Ø Ð × ´ ½¸ × ¿¸ ½¸ ¿℄µº Ð ×Ø Ð × ´ ½¸ × ¸ ¾¸ ¸ ¸ ℄µº Ð ×Ø Ð × ´ ½¸ × ¸ ¾¸ ¸ ℄µº Ð ×Ø Ð × ´ ½¸ × ¸ ¸ ℄µº Ð ×Ø Ð × ´ ½¸ × ¸ ¿¸ ℄µº Ð ×Ø Ð × ´ ½¸ × ¸ ¸ ¸ ℄µº Ð ×Ø Ð × ´ ¾¸ × ¸ ¸ ½½℄µº Ð ×Ø Ð × ´ ¾¸ × ½¼¸ ½¼¸ ½¾℄µº Ð ×Ø Ð × ´ ¾¸ × ½½¸ ½¼¸ ½½℄µº Ð ×Ø Ð × ´ ¾¸ × ½¾¸ ¸ ½¾℄µº Ejercicio 7.1 Definir la relación × Ò ØÙÖ ×´· ¸¹Äµ que se verifique si Ä es la lista de asig- naturas del curso . Por ejemplo, ¹ × Ò ØÙÖ ×´ ½¸Äµº Ä × ½¸ × ¾¸ × ¿¸ × ¸ × ¸ × ¸ × ¸ × ℄ 107
  • 108. 108 Capítulo 7. Aplicaciones de programación declarativa ¹ × Ò ØÙÖ ×´ ¾¸Äµº Ä × ¸ × ½¼¸ × ½½¸ × ½¾℄ Solución: La definición de × Ò ØÙÖ × es × Ò ØÙÖ ×´ ¸Äµ ¹ Ò Ðд ¸Ð ר Ð × ´ ¸ ¸ µ¸Äµº Ejercicio 7.2 Definir la relación ÖÙÔÓ Ò ÓÑÔ Ø Ð ´·Äµ que se verifique si la lista de asig- naturas Ä es incompatible (es decir, algún alumno está en las listas de clase de más de una asignatura de la lista Ä). Por ejemplo, ¹ ÖÙÔÓ Ò ÓÑÔ Ø Ð ´ × ½¸ × ¾℄µº × ¹ ÖÙÔÓ Ò ÓÑÔ Ø Ð ´ × ½¸ × ¸ × ℄µº ÆÓ Solución: La definición de ÖÙÔÓ Ò ÓÑÔ Ø Ð es ÖÙÔÓ Ò ÓÑÔ Ø Ð ´Äµ ¹ × Ð Ø´ ¸Ä¸Êµ¸ Ñ Ñ Ö´ ¸Êµ¸ Ð ×Ø Ð × ´ ¸ ¸Ä µ¸ Ð ×Ø Ð × ´ ¸ ¸Ä µ¸ Ñ Ñ Ö´ ¸Ä µ¸ Ñ Ñ Ö´ ¸Ä µº Ejercicio 7.3 Definir la relación Ð ×Ø Ò ÓÑÔ Ø Ð ´·Äµ que verifique si la lista de grupos de asignaturas Ä es incompatible (es decir, contiene algún grupo incompatible de asignaturas). Por ejemplo, ¹ Ð ×Ø Ò ÓÑÔ Ø Ð ´ × ¸ × ½¾℄¸ × ½½¸ × ½¼℄℄µº × ¹ Ð ×Ø Ò ÓÑÔ Ø Ð ´ × ½½¸ × ½¾℄¸ × ¸ × ½¼℄℄µº ÆÓ Solución: La definición de Ð ×Ø Ò ÓÑÔ Ø Ð es Ð ×Ø Ò ÓÑÔ Ø Ð ´Èµ ¹ Ñ Ñ Ö´ ¸Èµ¸ ÖÙÔÓ Ò ÓÑÔ Ø Ð ´ µº
  • 109. 7.1. Formación de grupos minimales de asignaturas compatibles 109 Ejercicio 7.4 Definir la relación ÜØ Ò× Ò´·Ä½¸· ¸¹Ä¾µ que se verifique si ľ es la lista obte- nida añadiendo como primer elemento de un elemento de Ľ o ľ es la lista obtenida añadiendo ℄ a Ľ. Por ejemplo, ¹ ÜØ Ò× Ò´ ℄¸ ¸ ℄℄¸ ¸ µº ¸ ℄¸ ¸ ℄℄ ℄¸ ¸ ¸ ℄℄ ℄¸ ¸ ℄¸ ℄℄ ÆÓ Solución: La definición de ÜØ Ò× Ò es ÜØ Ò× Ò´ ℄¸ ¸ ℄℄µº ÜØ Ò× Ò´ Ä Ä½℄¸ ¸ Ä℄ Ľ℄µº ÜØ Ò× Ò´ Ä Ä½℄¸ ¸ Ä Ä¾℄µ ¹ ÜØ Ò× Ò´Ä½¸ ¸Ä¾µº Ejercicio 7.5 Definir la relación Ô ÖØ Ò´·Ä¸¹Èµ que se verifique si È es una partición de la lista Ä (es decir, un conjunto obtenido distribuyendo los elementos de Ä en conjuntos no vacíos y sin elementos comunes). Por ejemplo, ¹ Ô ÖØ Ò´ ¸ ¸ ℄¸Èµº È ¸ ¸ ℄℄ È ¸ ℄¸ ℄℄ È ¸ ℄¸ ℄℄ È ℄¸ ¸ ℄℄ È ℄¸ ℄¸ ℄℄ ÆÓ Solución: La definición de Ô ÖØ Ò es Ô ÖØ Ò´ ℄¸ ℄µº Ô ÖØ Ò´ Ľ℄¸Ä¾µ ¹ Ô ÖØ ҴĽ¸Ä¿µ¸ ÜØ Ò× Ò´Ä¿¸ ¸Ä¾µº Ejercicio 7.6 Definir la relación ÖÙÔ Ò ÓÑÔ Ø Ð × Ò ØÙÖ ×´· ¸¹Èµ que se verifique si È es una partición compatible de las asignaturas del curso . Por ejemplo, ¹ ÖÙÔ Ò ÓÑÔ Ø Ð × Ò ØÙÖ ×´ ¾¸Èµº È × ½½¸ × ½¾℄¸ × ¸ × ½¼℄℄ È × ½½¸ × ½¾℄¸ × ½¼℄¸ × ℄℄ ×
  • 110. 110 Capítulo 7. Aplicaciones de programación declarativa Solución: La definición de ÖÙÔ Ò ÓÑÔ Ø Ð × Ò ØÙÖ × es ÖÙÔ Ò ÓÑÔ Ø Ð × Ò ØÙÖ ×´ ¸Èµ ¹ × Ò ØÙÖ ×´ ¸Äµ¸ Ô ÖØ Ҵĸȵ¸ ÒÓØ´Ð ר Ò ÓÑÔ Ø Ð ´Èµµº Ejercicio 7.7 Definir la relación ÖÙÔ Ò ÓÑÔ Ø Ð Ñ Ò Ñ Ð´· ¸¹Èµ que se verifique si È es una partición compatible de las asignaturas del curso con el menor número posible de grupos de asignaturas. Por ejemplo, ¹ ÖÙÔ Ò ÓÑÔ Ø Ð Ñ Ò Ñ Ð´ ¾¸Èµº È × ½½¸ × ½¾℄¸ × ¸ × ½¼℄℄ ÆÓ Calcular las agrupaciones compatibles minimales del curso ½. Solución: La definición ÖÙÔ Ò ÓÑÔ Ø Ð Ñ Ò Ñ Ð es ÖÙÔ Ò ÓÑÔ Ø Ð Ñ Ò Ñ Ð´ ¸Èµ ¹ ÖÙÔ Ò ÓÑÔ Ø Ð × Ò ØÙÖ ×´ ¸Èµ¸ Ð Ò Ø ´È¸Æµ¸ ÒÓØ´´ ÖÙÔ Ò ÓÑÔ Ø Ð × Ò ØÙÖ ×´ ¸È½µ¸Ð Ò Ø ´È½¸Åµ¸Å Ƶµº Las agrupaciones compatibles minimales del curso ½ se calculan mediante la con- sulta ¹ ÖÙÔ Ò ÓÑÔ Ø Ð Ñ Ò Ñ Ð´ ½¸Èµº È × ¿¸ × ¸ × ℄¸ × ½¸ × ¸ × ℄¸ × ¾¸ × ℄℄ È × ¾¸ × ℄¸ × ½¸ × ¸ × ℄¸ × ¿¸ × ¸ × ℄℄ ÆÓ 7.2. Simulación de una calculadora básica El objetivo de los siguientes ejercicios es la simulación de una calculadora básica. Para ello consideraremos que en cada momento la calculadora se encuentra en un de- terminado estado caracterizado por una lista con cuatro elementos Í ¸ÍÌ ¸ÍÇ ¸ÎÁÅ℄ donde Í es el último cálculo efectuado, ÍÌ es la última tecla activada,
  • 111. 7.2. Simulación de una calculadora básica 111 ÍÇ es el último operador activado y ÎÁÅ es el valor impreso. El estado inicial es ¼¸ ¸ ¸¼℄ y está definido por ר Ó Ò Ð´ ¼¸ ¸ ¸¼℄µº Las acciones posibles son pulsar un dígito, una operación aritmética o la de resul- tado y están definidas por Ò´ µ ¹ × ØÓ´ µº Ò´ µ ¹ × ÓÔ Ö Ò´ µº Ò´ µ ¹ × Ö ×ÙÐØ Ó´ µº × ØÓ´¼µº × ØÓ´½µº × ØÓ´¾µº × ØÓ´¿µº × ØÓ´ µº × ØÓ´ µº × ØÓ´ µº × ØÓ´ µº × ØÓ´ µº × ØÓ´ µº × ÓÔ Ö Ò´·µº × ÓÔ Ö Ò´¹µº × ÓÔ Ö Ò´¶µº × ÓÔ Ö Ò´»µº × Ö ×ÙÐØ Ó´ µº En la siguiente tabla se muestran los estados de la calculadora correspondientes a las acciones indicadas en la última columna
  • 112. 112 Capítulo 7. Aplicaciones de programación declarativa estado tecla ´ ¼¸ ¸ ¸ ¼µ ¿ ´ ¼¸ ¿¸ ¸ ¿µ · ´ ¿¸ ·¸ ·¸ ¿µ ¾ ´ ¿¸ ¾¸ ·¸ ¾µ ½ ´ ¿¸ ½¸ ·¸ ¾½µ ¶ ´¾ ¸ ¶¸ ¶¸ ¾ µ ¾ ´¾ ¸ ¾¸ ¶¸ ¾µ ´ ¸ ¸ ¸ µ Es decir, si se parte del estado inicial y se realizan las acciones ¿ · ¾ ½ ¶ ¾ se obtiene como resultado el número . Ejercicio 7.8 Definir la relación ØÖ Ò× Ò´· ½¸· ¸ ¾µ que se verifique si ¾ es el estado obtenido aplicando la acción al estado ½; es decir, si ½ es Í ¸ÍÌ ¸ÍÇ ¸ÎÁÅ℄, entonces Si es un dígito, entonces • si ÍÌ es un dígito, ¾ es Í ¸ ¸ÍÇ ¸½¼¶ÎÁÅ· ℄; • en otro caso, ¾ es Í ¸ ¸ÍÇ ¸ ℄. Si no es un dígito, entonces • si ÍÇ es una operación, ¾ es ÍÇ ´Í ¸ÎÁŵ¸ ¸ ¸ÍÇ ´Í ¸ÎÁŵ℄ • en otro caso, ¾ es ÎÁŸ ¸ ¸ÎÁÅ℄. Por ejemplo, ¹ ר Ó Ò Ð´ ½µ¸ ØÖ Ò× Ò´ ½¸¿¸ ¾µ¸ ØÖ Ò× Ò´ ¾¸·¸ ¿µ¸ ØÖ Ò× Ò´ ¿¸¾¸ µ¸ ØÖ Ò× Ò´ ¸½¸ µ¸ ØÖ Ò× Ò´ ¸¶¸ µ¸ ØÖ Ò× Ò´ ¸¾¸ µ¸ ØÖ Ò× Ò´ ¸ ¸ µº ½ ¼¸ ¸ ¸ ¼℄ ¾ ¼¸ ¿¸ ¸ ¿℄ ¿ ¿¸ ·¸ ·¸ ¿℄ ¿¸ ¾¸ ·¸ ¾℄ ¿¸ ½¸ ·¸ ¾½℄
  • 113. 7.2. Simulación de una calculadora básica 113 ¾ ¸ ¶¸ ¶¸ ¾ ℄ ¾ ¸ ¾¸ ¶¸ ¾℄ ¸ ¸ ¸ ℄ Solución: Presentamos tres definiciones. La primera definición de ØÖ Ò× Ò es ØÖ Ò× Ò ½´ Í ¸ÍÌ ¸ÍÇ ¸ÎÁÅ℄¸ ¸ µ ¹ ´ × ØÓ´ µ ¹ ´ × ØÓ´ÍÌ µ ¹ × ½¼¶ÎÁÅ· ¸ Í ¸ ¸ÍÇ ¸ ℄ ± · × ØÓ´ÍÌ µ ¹ Í ¸ ¸ÍÇ ¸ ℄ µ ± · × ØÓ´ µ ¹ ´ × ÓÔ Ö Ò´ÍÇ µ ¹ Ì ºº ÍÇ ¸Í ¸ÎÁÅ℄¸ × Ì¸ ¸ ¸ ¸ ℄ ± · × ÓÔ Ö Ò´ÍÇ µ ¹ ÎÁŸ ¸ ¸ÎÁÅ℄ µµº La segunda definición de ØÖ Ò× Ò es ØÖ Ò× Ò ¾´ Í ¸ÍÌ ¸ÍÇ ¸ÎÁÅ℄¸ ¸ µ ¹ ´ × ØÓ´ µ¸ × ØÓ´ÍÌ µ ¹ × ½¼¶ÎÁÅ· ¸ Í ¸ ¸ÍÇ ¸ ℄ × ØÓ´ µ¸ · × ØÓ´ÍÌ µ ¹ Í ¸ ¸ÍÇ ¸ ℄ · × ØÓ´ µ¸ × ÓÔ Ö Ò´ÍÇ µ ¹ Ì ºº ÍÇ ¸Í ¸ÎÁÅ℄¸ × Ì¸ ¸ ¸ ¸ ℄ · × ØÓ´ µ¸ × Ö ×ÙÐØ Ó´ÍÇ µ ¹ ÎÁŸ ¸ ¸ÎÁÅ℄ µº La tercera definición de ØÖ Ò× Ò es ØÖ Ò× Ò ¿´ Í ¸ÍÌ ¸ÍÇ ¸ÎÁÅ℄¸ ¸ Í ¸ ¸ÍÇ ¸ ℄µ ¹ × ØÓ´ µ¸ × ØÓ´ÍÌ µ¸
  • 114. 114 Capítulo 7. Aplicaciones de programación declarativa × ½¼¶ÎÁÅ· º ØÖ Ò× Ò ¿´ Í ¸ÍÌ ¸ÍÇ ¸ ÎÁÅ℄¸ ¸ Í ¸ ¸ÍÇ ¸ ℄µ ¹ × ØÓ´ µ¸ · × ØÓ´ÍÌ µº ØÖ Ò× Ò ¿´ Í ¸ ÍÌ ¸ÍÇ ¸ÎÁÅ℄¸ ¸ ¸ ¸ ¸ ℄µ ¹ · × ØÓ´ µ¸ × ÓÔ Ö Ò´ÍÇ µ¸ Ì ºº ÍÇ ¸Í ¸ÎÁÅ℄¸ × Ìº ØÖ Ò× Ò ¿´ Í ¸ ÍÌ ¸ ¸ÎÁÅ℄¸ ¸ ÎÁŸ ¸ ¸ÎÁÅ℄µ ¹ · × ØÓ´ µº En lo que sige usaremos la primera. ØÖ Ò× Ò´ ½¸ ¸ ¾µ ¹ ØÖ Ò× Ò ½´ ½¸ ¸ ¾µº Ejercicio 7.9 Definir la relación ØÖ Ò× ÓÒ ×´· ½¸·Ä¸ ¾µ que se verifique si ¾ es el esta- do obtenido aplicando las acciones de la lista Ä al estado ½. Por ejemplo, ¹ ר Ó Ò Ð´ ½µ¸ ØÖ Ò× ÓÒ ×´ ½¸ ¿¸·¸¾¸½¸¶¸¾¸ ℄¸ ¾µº ¾ ¸ ¸ ¸ ℄ Solución: La definición de ØÖ Ò× ÓÒ × es ØÖ Ò× ÓÒ ×´ ¸ ℄¸ µº ØÖ Ò× ÓÒ ×´ ½¸ Ä℄¸ ¿µ ¹ ØÖ Ò× Ò´ ½¸ ¸ ¾µ¸ ØÖ Ò× ÓÒ ×´ ¾¸Ä¸ ¿µº Ejercicio 7.10 Definir la relación ÓÒ ×´ ĵ que se verifique si Ä es una lista cuyos ele- mentos son acciones. Por ejemplo, ¹ ÓÒ ×´ ¾¸·¸¿¸ ℄µº × ¹ ÓÒ ×´ ¾¸·¸¿ ℄µº ÆÓ Usarlo para calcular el número de posibles listas de acciones de longitud 3. Solución: La definición de ÓÒ × es
  • 115. 7.2. Simulación de una calculadora básica 115 ÓÒ ×´ ℄µº ÓÒ ×´ Ä℄µ ¹ Ò´ µ¸ ÓÒ ×´Äµº El número Æ de listas de acciones de longitud 3 se calcula mediante la consulta ¹ Ò Ðд ĸ´Ð Ò Ø ´ ĸ¿µ¸ ÓÒ ×´ ĵµ¸ Ä Ä¿µ¸ Ð Ò Ø ´ Ä Ä¿¸Æµº Æ ¿¿ Ejercicio 7.11 Para realizar una operación en la calculadora no todas las combinaciones de te- clas (acciones) son válidas. Por ejemplo, no podemos teclear dos operaciones consecutivas o divi- dir por cero. La siguiente relación define las acciones válidas ÓÒ × Ú Ð ×´Äµ ¹ ÓÒ ×´Äµ¸ ÑÔ Þ ÔÓÖ ØÓ´Äµ¸ ÒÓØ´Ø Ò ÓÔ Ö ÓÒ × ÓÒ× ÙØ Ú ×´Äµµ¸ ÒÓØ´Ø Ò Ö ×ÙÐØ Ó ÒØ ÖÑ Ó´Äµµ¸ ÒÓØ´ Ú ÔÓÖ ÖӴĵµ¸ Ø ÖÑ Ò Ò ØÓ Ý Ö ×ÙÐØ Ӵĵº En los apartados de este ejercicio se definen de las relaciones auxiliares. 1. Definir la relación ÑÔ Þ ÔÓÖ ØÓ´ ĵ que se verifique si el primer elemento de la lista Ä es un dígito. 2. Definir la relación Ø Ò ÓÔ Ö ÓÒ × ÓÒ× ÙØ Ú ×´ ĵ que se verifique si la lista Ä contiene dos operaciones consecutivas. 3. Definir la relación Ø Ò Ö ×ÙÐØ Ó ÒØ ÖÑ Ó´ Ä) que se verifique si la lista Ä con- tiene el símbolo en una posición que no es la última. 4. Definir la relación Ú ÔÓÖ ÖÓ´ ĵ que se verifique si en la lista Ä aparecen de manera consecutiva el símbolo » y un cero. 5. Definir la relación Ø ÖÑ Ò Ò ØÓ Ý Ö ×ÙÐØ Ó´ ĵ que se verifique si en la lista Ä los últimos elementos son un dígito y el símbolo . Solución:
  • 116. 116 Capítulo 7. Aplicaciones de programación declarativa ÑÔ Þ ÔÓÖ ØÓ´ Ä℄µ ¹ × ØÓ´ µº Ø Ò ÓÔ Ö ÓÒ × ÓÒ× ÙØ Ú ×´Äµ ¹ ÔÔ Ò ´ ¸ ¸ ℄¸Äµ¸ × ÓÔ Ö Ò´ µ¸ × ÓÔ Ö Ò´ µº Ø Ò Ö ×ÙÐØ Ó ÒØ ÖÑ Ó´Äµ ¹ ÔÔ Ò ´ ¸ ¸ ℄¸Äµº Ú ÔÓÖ ÖӴĵ ¹ ÔÔ Ò ´ ¸ »¸¼ ℄¸Äµº Ø ÖÑ Ò Ò ØÓ Ý Ö ×ÙÐØ Ӵĵ ¹ Ö Ú Ö× ´Ä¸ ¸ ℄µ¸ × ØÓ´ µº Ejercicio 7.12 Calcular el número de posibles listas de acciones válidas de longitud 3. Solución: El número Æ de listas de acciones válidad de longitud 3 se calcula me- diante la consulta ¹ Ò Ðд ĸ´Ð Ò Ø ´ ĸ¿µ¸ ÓÒ × Ú Ð ×´ ĵµ¸ Ä Ä¿µ¸ Ð Ò Ø ´ Ä Ä¿¸Æµº Æ ½¼¼ Ejercicio 7.13 Definir la relación Ð ÙÐÓ´·Æ¸·Å¸¹Äµ que se verifique si Ä es una lista de Å acciones válidas que aplicadas al estado inicial da como resultado el número Æ. Por ejemplo, ¹ Ð ÙÐÓ´ ¸¾¸Äµº Ä ¸ ℄ ÆÓ ¹ Ð ÙÐÓ´ ¸¿¸Äµº Ä ¼¸ ¸ ℄ ÆÓ ¹ Ð ÙÐÓ´ ¸ ¸Äµº Ä ¼¸ ¼¸ ¸ ℄ Ä ¼¸ ·¸ ¸ ℄ Ä ½¸ ·¸ ¸ ℄ Ä ½¸ ¶¸ ¸ ℄ Ä ¾¸ ·¸ ¿¸ ℄ ×
  • 117. 7.3. Problema de las subastas 117 Solución: Ð ÙÐӴƸŸĵ ¹ ר Ó Ò Ð´ ½µ¸ Ð Ò Ø ´Ä¸Åµ¸ ÓÒ × Ú Ð ×´Äµ¸ ØÖ Ò× ÓÒ ×´ ½¸Ä¸ Ƹ ¸ ¸Æ℄µº 7.3. Problema de las subastas Ejercicio 7.14 En una subasta se hacen distintas ofertas. Cada oferta incluye un lote de pro- ductos y un precio por dicho lote. Las ofertas realizadas se representan mediante la relación Ó ÖØ ´Ç¸Ä¸Èµ que se verifica si Ç es una oferta por el lote Ä con un coste È. Por ejemplo, Ó ÖØ ´ ¸ ½¸¾¸¿℄¸¿¼µ representa la oferta en la que se puja por el lote compuesto por los objetos ½, ¾ y ¿ por un valor de ¿¼ euros. Para la aceptación 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 relación ÔØ ´¹Äµ que se verifique si Ä es una lista de ofertas aceptadas. Por ejemplo, si las ofertas realizadas se definen por Ó ÖØ ´ ¸ ½¸¾¸¿℄¸¿¼µº Ó ÖØ ´ ¸ ½¸¾¸¿℄¸¾¼µº Ó ÖØ ´ ¸ ℄¸¾¼µº Ó ÖØ ´ ¸ ¾¸ ℄¸¾¼µº Ó ÖØ ´ ¸ ½¸¾℄¸¾¼µº entonces, ¹ ÔØ ´Äµº Ä ¸ ℄ Solución: La definición de ÔØ es ÔØ ´Äµ ¹ ÔØ Ð ´Äµ¸ Ò Ò ´Ä¸ µ¸ ÒÓØ´´ ÔØ Ð ´Ä½µ¸ Ò Ò ´Ä½¸ ½µ¸ ½ µµº
  • 118. 118 Capítulo 7. Aplicaciones de programación declarativa La relación ÔØ Ð ´ ĵ 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 definición anterior de Ó ÖØ ×»¿, ¹ ÔØ Ð ´Äµº Ä ¸ ℄ Ä ℄ Ä ¸ ℄ Ä ℄ Ä ¸ ℄ Ä ℄ Ä ℄ Ä ℄ Ä ℄ ÆÓ ÔØ Ð ´Äµ ¹ Ð ×Ø Ó ÖØ ״Ľµ¸ ×Ù ÓÒ ÙÒØÓ´Ä¸Ä½µ¸ × ÔØ Ð ´Äµº La relación Ð ×Ø Ó ÖØ ×´¹Äµ se verifica si Ä es la lista de todas las ofertas. Por ejemplo, con la definición anterior de Ó ÖØ ×»¿, ¹ Ð ×Ø Ó ÖØ ״ĵº Ä ¸ ¸ ¸ ¸ ℄ Ð ×Ø Ó ÖØ ״ĵ ¹ Ò ÐÐ´Ç¸Ó ÖØ ´Ç¸ ¸ µ¸Äµº La relación ×Ù ÓÒ ÙÒØÓ´ Ľ¸·Ä¾µ se verifica si Ľ es un subconjunto de ľ. Por ejemplo, ¹ ×Ù ÓÒ ÙÒØÓ´Ä¸ ¸ ¸ ℄µº Ä ¸ ¸ ℄ Ä ¸ ℄ Ä ¸ ℄ Ä ℄ Ä ¸ ℄ Ä ℄ Ä ℄ Ä ℄ ÆÓ
  • 119. 7.3. Problema de las subastas 119 ×Ù ÓÒ ÙÒØÓ´ ℄¸ ℄µº ×Ù ÓÒ ÙÒØÓ´ Ľ℄¸ ľ℄µ ¹ ×Ù ÓÒ ÙÒØÓ´Ä½¸Ä¾µº ×Ù ÓÒ ÙÒØÓ´Ä½¸ ľ℄µ ¹ ×Ù ÓÒ ÙÒØÓ´Ä½¸Ä¾µº La relación × ÔØ Ð ´·Äµ se verifica si la lista de ofertas Ä es aceptable; es decir, no contiene ofertas con objetos comunes en sus lotes. Por ejemplo, con la definición anterior de Ó ÖØ ×»¿, ¹ × ÔØ Ð ´ ¸ ℄µº ÆÓ ¹ × ÔØ Ð ´ ¸ ℄µº × × ÔØ Ð ´Äµ ¹ ÒÓØ´ × Ò ÔØ Ð ´Äµµº La relación × Ò ÔØ Ð ´·Äµ se verifica si Ä es una lista de ofertas inaceptable; es decir, contiene ofertas con objetos comunes en sus lotes. Por ejemplo, con la definición anterior de Ó ÖØ ×»¿, ¹ × Ò ÔØ Ð ´ ¸ ℄µº × ¹ × Ò ÔØ Ð ´ ¸ ℄µº ÆÓ × Ò ÔØ Ð ´Äµ ¹ Ñ Ñ Ö´Ç½¸Äµ¸ Ñ Ñ Ö´Ç¾¸Äµ¸ ǽ Ǿ¸ Ó ÖØ ´Ç½¸Ä½¸ µ¸ Ó ÖØ ´Ç¾¸Ä¾¸ µ¸ × ×ÓÐ Ô Ò´Ä½¸Ä¾µº La relación × ×ÓÐ Ô Ò´·Ä½¸·Ä¾µ se verifica si Ľ y ľ se solapan; es decir, tienen elementos comunes. Por ejemplo,
  • 120. 120 Capítulo 7. Aplicaciones de programación declarativa ¹ × ×ÓÐ Ô Ò´ ¸ ¸ ℄¸ ¸ ¸ ℄µº × ¹ × ×ÓÐ Ô Ò´ ¸ ¸ ℄¸ ¸ ℄µº ÆÓ × ×ÓÐ Ô Ò´Ä½¸Ä¾µ ¹ Ñ Ñ Ö´ ¸Ä½µ¸ Ñ Ñ Ö´ ¸Ä¾µº La relación Ò Ò ´·Ä¸¹ µ se verifica si la ganancia de la lista de ofertas L es . Por ejemplo, con la definición anterior de Ó ÖØ ×»¿, ¹ Ò Ò ´ ¸ ℄¸ µº ¼ Ò Ò ´ ℄¸¼µº Ò Ò ´ Ç Ä℄¸ µ ¹ Ó ÖØ ´Ç¸ ¸ ½µ¸ Ò Ò ´Ä¸ ¾µ¸ × ½· ¾º
  • 121. Bibliografía [1] J. A. Alonso. Introducción a la programación lógica con Prolog, 2006. En ØØÔ »»ÛÛÛº ׺Ù׺ ×» ÐÓÒ×Ó»ÔÙ Ð ÓÒ ×»¾¼¼ ¹ ÒØ ÔÖÓÐÓ ºÔ . [2] J. A. Alonso. Temas de “Programación 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. Addison–Wesley, 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. Springer–Verlag, 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). Addison–Wesley, 1990. [10] J. P. Delahaye. Cours de Prolog avec Turbo Prolog (Eléments fondamentaux). Eyrolles, 1988. [11] U. Nilsson and J. Maluszynski. Logic, Programming and Prolog. 2 edition, 2000. En ØØÔ »»ÛÛÛº ºÐ Ùº× » ÙÐ Ò »ÐÔÔ. [12] R. A. O’Keefe. 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. Springer–Verlag, 1990. 121
  • 122. 122 Bibliografía [15] L. Sterling and E. Shapiro. L’art de Prolog. Masson, 1990. [16] T. Van Le. Techniques of Prolog Programming (with implementation of logical negation and quantified goals). John Wiley, 1993.
  • 123. Índice alfabético ÐØ ÑÓ, 15 Ò Ó×, 83 ÓÒ × Ú Ð ×, 115 ÓÒ ×, 114 ÔØ ÓØ ½, 42 ÔØ Ð , 118 ÔØ , 117 ÔØ , 41 Ö Ö, 55 ÖÙÔ Ò ÓÑÔ Ø Ð × Ò ØÙÖ ×, 110 ÖÙÔ Ò ÓÑÔ Ø Ð Ñ Ò Ñ Ð, 110 ÔÐ Ò , 96 × Ò ØÙÖ ×, 108 Ð ÙÐÓ, 117 Ð ÙÐ , 61 Ñ ÒÓ, 46 × , 36 × Ó, 35 Ð × , 88 Ð Ù×ÙÖ ØÖ Ò× Ø Ú , 93 Ó Ö Ø , 72 Ó Ö Ù , 70 Ó , 69 ÓÐÓÖ Ò, 104 ÓÑÔÖ Ñ , 68 ÓÒ , 12 ÓÒ×, 11 ÓÖÖ ØÓ, 46 ÓØ ×ÙÔ Ö ÓÖ, 73 Ö ÒØ , 74 Ö Ñ ÒØÓ×, 60 Ù ÒØ , 84 Ó , 71 Ö ÒØ , 75 × ÓÑÔÓÒ , 98 ÒØ × × ÖÖ , 75 ÒØ , 74 Ö Ò , 54 Ú ×ÓÖ × ÔÖÓÔ Ó×, 87 ÜÝ, 45 Ð Ñ ÒØÓ Ò, 28 Ð Ñ Ò Ö ×, 82 Ð Ñ Ò ÚÓ Ð ×, 91 Ð Ñ Ò , 65 ÑÔ ÕÙ Ø , 68 ÒØÖ , 27 × Ò Ó, 83 × ÔØ Ð , 119 × Ù Ó, 97 × ÕÙ Ð Ø ÖÓ, 89 × Ò ÔØ Ð , 119 ÜÔÓÒ ÒØ Ó×, 58 ÜØ Ò× Ò, 109 ØÓÖ Ð ÓÒ Ñ ÑÓÖ , 78 ØÓÖ Ð ÒÚ Ö×Ó, 77 ØÓÖ Ð, 22, 78 ØÓÖ Þ Ò, 61 Ñ Ð , 34 Ò Ñ ÒØÓ, 37 ÓÒ , 22 Ò Ð, 41 , 85 Ò Ò , 120 Ò Ö Ò, 82 ÖÙÔÓ Ò ÓÑÔ Ø Ð , 108 Ö Ý, 100 123
  • 124. 124 Índice alfabético Ó, 36 ÓÖ ÞÓÒØ Ð, 32 Ò× ÖØ , 17 ÒÚ Ö× ½, 14 ÒÚ Ö× ¾, 14 Ð Ö Ù Ö Ó×, 63 Ð ×Ø ÓÒ ÙÒØÓ, 59 Ð ×Ø ÓØ , 23 Ð ×Ø Ò Ñ ÖÓ×, 27 Ð ×Ø Ó ÖØ ×, 118 Ð ×Ø ÔÓ× ÓÒ ×, 95 Ð ×Ø Ò ÓÑÔ Ø Ð , 108 Ð ×Ø , 26 ÐÓÒ ØÙ ÑÔ Ö, 19 ÐÓÒ ØÙ Ñ Ü, 86 ÐÓÒ ØÙ Ô Ö, 19 ÐÓÒ ØÙ × Ñ, 64 ÐÓÒ ØÙ ×, 85 ÐÓÒ ØÙ , 23, 92 Ñ Ü ÑÓ, 21, 47 Ñ ÐØ ÔÐÓ, 62 Ñ Ü Ð ×Ø , 24 Ñ , 22 Ñ Ñ Ö , 53 Ñ ÒÓÖ Ú ×ÓÖ ÔÖÓÔ Ó, 61 Ñ ÒÓÖ ÕÙ Ò Ö Ñ ÝÓÖ, 86 Ñ ÒÓÖ, 89 ÑÓÚ Ñ ÒØÓ, 44 ÑÙÐØ ÔÐ , 28 Ò Ñ ÖÓ× Ð ×Ø , 91 Ò Ñ ÖÓ×, 90 ÒÓÑ Ö , 93 ÒÙÐÓ, 41 ÓÔ Ö Ò Ð ×Ø , 90 ÓÖ Ò , 25 Ô Ð Ò ÖÓÑÓ, 15 Ô Ð Ö Ñ Ü Ñ Ð, 92 Ô Ð Ö × Ñ Ü Ñ Ð ×, 92 Ô ÖØ Ò, 109 Ô Ò ÐØ ÑÓ, 16 Ô ÖÑÙØ Ò, 18 Ô Ö×ÓÒ , 37 Ô ÖØ Ò , 11 ÔÓÔÙÐ Ö ×, 83 ÔÖ Ñ ÖÓ, 9 ÔÖÓÑ Ó, 88 Ö Ñ ÒÙ Ò, 100 Ö Ô Ø Ó×, 66 Ö Ô Ø Ó, 65 Ö ×ØÓ, 10 ÖÓØ , 20 × ÐØ , 45 × ×ÓÐ Ô Ò, 120 × Ð ÓÒ , 17 × Ô Ö , 56 ×ÓÐÙ Ò, 44 ×Ù ÓÒ ÙÒØÓ Ñ Ü Ñ Ð, 66 ×Ù ÓÒ ÙÒØÓ ×ÙÑ , 101 ×Ù ÓÒ ÙÒØÓ, 20, 119 ×Ù Ð ×Ø , 18 ×Ù × Ò, 85 ×Ù Ð Ó, 38 ×ÙÑ ØÓ×, 62 ×ÙÑ Ú ×ÓÖ × ÔÖÓÔ Ó×, 87 ×ÙÑ Ð Ö × Ù Ö Ó×, 63 ×ÙÑ Ð ×Ø , 25, 87 ×ÙÑ Ô Ö Ð, 26 ×ÙÑ Ô Ö ×, 57 ×ÙÑ ÔÓ× ÓÒ ×, 67 Ø ÔÓ, 88 ØÓ Ó× Ù Ð ×, 19 ØÓØ Ð, 38 ØÖ Ù Ò, 94 ØÖ Ò× ÓÖÑ , 95 ØÖ Ò× Ò, 113 ØÖ Ò× ÓÒ ×, 114 ØÖ Ò×, 41 Ú ÖØ Ð, 32