Guía de Ejercicios en Prolog
Lección 4 - Listas
Una de las estructuras de datos más importantes de Prolog
son las listas:
[esta, es, una, lista]
[]
a = [a]
|
El último elemento de cualquier lista es la lista vacía [].
[a, b, c] = [a, b, c, []]
|
Toda lista no vacía puede separarse entre cabeza y cola. Éstas
pueden separarse con |:
[a| [b, c, d]] = [a, b, c, d]
[a| []] = [a]
|
1.- Trata de predecir la unificación que resulta en los
siguientes ejemplos y confirma luego ejecutándo:
?- [X| Y] = [a, b, c, d].
?- [X, Y| Z] = [a, b, c].
?- [X, Y| Z] = [a, b, c, d].
?- [X, Y, Z| A] = [a, b, c].
?- [X, Y, Z| A] = [a, b].
?- [X, Y, a] = [Z, b, Z].
?- [X, Y| Z] = [a, W].
|
2.- Otra de los usos que se le da a las listas es el de record/estructura,
al estilo de C:
['Bernardita', 'Arellano', 26, 'Abogada']
['Francisco', 'Pérez', 24, 'Pedagogo']
['Hugo', 'Fernández', 25, 'Vago']
|
Define un predicado edad(Estructura, Edad) que toma
una de las estructuras anteriores y que instancia Edad con
la edad.
3.- Para hacer uso total del poder de las listas, necesitas una
estrategia para lidiar con sus elementos sin conocer previamente
su posición. Para ésto debes acostumbrarte a trabajar
con recursión.
Define el predicado miembro_de(Elemento, Lista) que
es verdadero si Elemento está en Lista.
4.- Define el predicado append(L1, L2, L) que concatena
las listas L1 y L2 y deja el resultado
en L.
5.- Define el predicado reverse(L, LR) que es verdadero
si LR es la lista L invertida.
6.- Los strings en Prolog consisten en listas de los códigos
ASCII de los caracteres. Así:
"Hola" = [72, 111, 108, 97]
|
Define el predicado alreves(S, SR) que es verdadero
si SR es el string S al revés.
Ahora, utiliza alreves/2 para definir el predicado escribe_alreves(S) que
escribe el string S invertido en pantalla. Utiliza
la función put(X) que escribe el caracter con
código ASCII X en pantalla.
?- escribe_alreves("hola").
aloh
|
Nota: Para leer un caracter, puedes utilizar get(X).
|