Exerciții Laboratorul 2, Exercițiul 11

remove_duplicates/2 — elimină duplicatele

Definiți un predicat remove_duplicates/2 care șterge toate duplicatele din lista dată ca prim argument și întoarce rezultatul în al doilea argument.

?- remove_duplicates([a, b, a, c, d, d], List).
List = [b, a, c, d]

Observație: varianta din breviar păstrează fiecare element la ultima lui apariție în lista originală (de aceea a apare după b în rezultat). Alte versiuni ar păstra prima apariție — comportament diferit.

Hint: două clauze — dacă H nu mai apare în coadă, îl păstrezi; altfel îl arunci și continui pe coadă. Folosește not(member(H, T)) pentru test.

Te-ai blocat?
editor soluție
?-
Tastează o interogare (ex. father_of(sandra, X).) și apasă Enter — sau apasă pe un caz de test de mai jos.
Cazuri de test (3 — apasă pe unul ca să îl rulezi, sau Verifică pentru toate)
?
remove_duplicates([a, b, a, c, d, d], List). așteptat: List = [b,a,c,d]
?
remove_duplicates([], List). așteptat: List = []
?
remove_duplicates([x, x, x], List). așteptat: List = [x]