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]:

% Afegeix un element al principi d'una llista
afegeix(Element, Llista, [Element|Llista]).

Longitud d'una Llista

Podem calcular la longitud d'una llista amb una regla recursiva:

% Longitud d'una llista
longitud([], 0).
longitud([_|Cua], N) :-
    longitud(Cua, N1),
    N is N1 + 1.

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 és buida
es_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.

© Copyright 2024. Tots els drets reservats