Les llistes són una de les estructures de dades més importants i utilitzades en Prolog. Són col·leccions ordenades d'elements que poden ser de qualsevol tipus, incloent altres llistes. En aquest tema, aprendrem com definir, manipular i utilitzar llistes en Prolog.
Continguts
Definició de Llistes
En Prolog, una llista es defineix utilitzant claudàtors []
. Els elements de la llista es separen per comes. Per exemple:
% Llista buida [] % Llista amb elements [1, 2, 3, 4, 5] % Llista amb elements de diferents tipus [1, 'hello', 3.14, [a, b, c]]
Cap i Cua
Una llista es pot dividir en el seu primer element (cap) i la resta de la llista (cua). Això es fa utilitzant el patró [Cap|Cua]
. Per exemple:
% Cap és el primer element, Cua és la resta de la llista [Cap|Cua] = [1, 2, 3, 4, 5]. % Cap = 1 % Cua = [2, 3, 4, 5]
Operacions Bàsiques amb Llistes
Concatenació de Llistes
La concatenació de llistes es pot fer utilitzant una regla recursiva. Aquí teniu un exemple de com definir una regla per concatenar dues llistes:
% Concatenar dues llistes concatenar([], L, L). concatenar([X|L1], L2, [X|L3]) :- concatenar(L1, L2, L3).
Afegeix un Element a una Llista
Per afegir un element al principi d'una llista, simplement utilitzem el patró [Element|Llista]
:
Longitud d'una Llista
Podem calcular la longitud d'una llista amb una regla recursiva:
Patrons de Coincidència
Els patrons de coincidència són molt útils per treballar amb llistes. Aquí teniu alguns exemples:
Verificar si una Llista és Buida
Verificar si una Llista té un Element
% Verificar si una llista conté un element conté(Element, [Element|_]). conté(Element, [_|Cua]) :- conté(Element, Cua).
Exemples Pràctics
Exemple 1: Invertir una Llista
% Invertir una llista invertir([], []). invertir([Cap|Cua], LlistaInversa) :- invertir(Cua, CuaInversa), concatenar(CuaInversa, [Cap], LlistaInversa).
Exemple 2: Trobar el Màxim d'una Llista
% Trobar el màxim d'una llista maxim([X], X). maxim([X|Cua], Max) :- maxim(Cua, MaxCua), Max is max(X, MaxCua).
Exercicis
Exercici 1: Eliminar un Element d'una Llista
Escriu una regla eliminar(Element, Llista, NovaLlista)
que elimini totes les ocurrències d'un element d'una llista.
% Solució eliminar(_, [], []). eliminar(Element, [Element|Cua], NovaLlista) :- eliminar(Element, Cua, NovaLlista). eliminar(Element, [Cap|Cua], [Cap|NovaLlista]) :- eliminar(Element, Cua, NovaLlista).
Exercici 2: Subllista
Escriu una regla subllista(Sub, Llista)
que verifiqui si Sub
és una subllista de Llista
.
% Solució subllista([], _). subllista([X|SubCua], [X|LlistaCua]) :- subllista(SubCua, LlistaCua). subllista(Sub, [_|LlistaCua]) :- subllista(Sub, LlistaCua).
Conclusió
En aquesta secció, hem après què són les llistes en Prolog, com definir-les i com realitzar operacions bàsiques amb elles. Les llistes són una eina poderosa i flexible que ens permeten manipular col·leccions d'elements de manera eficient. En els següents temes, explorarem operacions més avançades amb llistes i altres estructures de dades en Prolog.
Curs de Programació en Prolog
Mòdul 1: Introducció a Prolog
- Què és Prolog?
- Instal·lant Prolog
- Primers Passos en Prolog
- Sintaxi i Estructura Bàsiques
- Fets, Regles i Consultes
Mòdul 2: Programació Bàsica en Prolog
Mòdul 3: Estructures de Dades en Prolog
Mòdul 4: Programació Avançada en Prolog
- Unificació Avançada
- Tall i Negació
- Meta-Programació
- Gramàtiques de Claus Definides (DCGs)
- Programació Lògica amb Restriccions
Mòdul 5: Prolog en la Pràctica
- Entrada/Sortida de Fitxers
- Depuració de Programes Prolog
- Biblioteques Prolog
- Interfície amb Altres Llenguatges
- Construint una Aplicació Prolog