En aquest tema, explorarem les operacions més comunes que es poden realitzar amb llistes en Prolog. Les llistes són una estructura de dades fonamental en Prolog i comprendre com manipular-les és essencial per a la programació efectiva en aquest llenguatge.

Contingut

Introducció a les Llistes

Una llista en Prolog és una col·lecció ordenada d'elements, que poden ser de qualsevol tipus, incloent altres llistes. Les llistes es representen entre claudàtors [], amb els elements separats per comes.

Exemple de Llista

% Llista buida
[]

% Llista amb elements
[1, 2, 3, 4, 5]

% Llista amb elements de diferents tipus
[1, 'a', [2, 3], foo]

Concatenació de Llistes

La concatenació de llistes és una operació comuna que combina dues llistes en una sola. En Prolog, podem definir una regla per concatenar dues llistes.

Regla de Concatenació

% Concatenació de dues llistes
concatena([], L, L).
concatena([H|T], L, [H|R]) :- concatena(T, L, R).

Explicació

  • concatena([], L, L).: Si la primera llista és buida, la concatenació és simplement la segona llista.
  • concatena([H|T], L, [H|R]) :- concatena(T, L, R).: Si la primera llista no és buida, es descompon en el cap H i la cua T. El cap es manté i es concatena la cua amb la segona llista.

Exemple d'Ús

?- concatena([1, 2], [3, 4], L).
L = [1, 2, 3, 4].

Afegeix i Elimina Elements

Afegeix un Element al Principi

Per afegir un element al principi d'una llista, simplement utilitzem l'operador |.

% Afegeix un element al principi
afegeix_principi(E, L, [E|L]).

Exemple d'Ús

?- afegeix_principi(1, [2, 3, 4], L).
L = [1, 2, 3, 4].

Elimina un Element

Per eliminar un element d'una llista, podem definir una regla que recorri la llista i elimini l'element desitjat.

% Elimina un element de la llista
elimina(_, [], []).
elimina(E, [E|T], T).
elimina(E, [H|T], [H|R]) :- elimina(E, T, R).

Exemple d'Ús

?- elimina(2, [1, 2, 3, 2, 4], L).
L = [1, 3, 2, 4].

Recorregut de Llistes

Recórrer una llista és una operació fonamental per aplicar una funció a cada element de la llista.

Regla de Recorregut

% Recorre una llista i aplica una acció a cada element
recorre([], _).
recorre([H|T], Accio) :- call(Accio, H), recorre(T, Accio).

Exemple d'Ús

% Acció que imprimeix cada element
imprimeix(X) :- writeln(X).

?- recorre([1, 2, 3, 4], imprimeix).
1
2
3
4
true.

Exercicis Pràctics

  1. Concatenació de Tres Llistes: Escriu una regla concatena3(L1, L2, L3, L) que concateni tres llistes en una sola.
  2. Afegeix al Final: Escriu una regla afegeix_final(E, L, R) que afegeixi un element E al final de la llista L.
  3. Inverteix una Llista: Escriu una regla inverteix(L, R) que inverteixi els elements d'una llista.

Solucions

  1. Concatenació de Tres Llistes
concatena3(L1, L2, L3, L) :- concatena(L1, L2, Temp), concatena(Temp, L3, L).
  1. Afegeix al Final
afegeix_final(E, [], [E]).
afegeix_final(E, [H|T], [H|R]) :- afegeix_final(E, T, R).
  1. Inverteix una Llista
inverteix(L, R) :- inverteix(L, [], R).

inverteix([], Acc, Acc).
inverteix([H|T], Acc, R) :- inverteix(T, [H|Acc], R).

Conclusió

En aquest tema, hem après com realitzar operacions bàsiques amb llistes en Prolog, incloent la concatenació, l'afegit i l'eliminació d'elements, i el recorregut de llistes. Aquestes operacions són fonamentals per a la manipulació de dades en Prolog i proporcionen una base sòlida per a temes més avançats. A continuació, passarem a explorar les tuples i estructures en Prolog.

© Copyright 2024. Tots els drets reservats