Exerciții Șablon parțial (2026-04-22), Subiectul I d) [3 puncte]

countByCountries/1 — câte cărți publicate pe fiecare țară

Șablon parțial (2026-04-22), Subiectul I d) [3 puncte] advanced findall / bagof / setof (generate-and-test)Fapte, reguli, baze de cunoștințe

Determinați, pentru fiecare țară (obținută de la publisher), câte cărți au fost publicate. Scrieți un predicat countByCountries/1 care returnează lista de țări, împreună cu numărul de cărți.

?- countByCountries(Result).
Result = [('Germany',2),('UK',3),('USA',3)]

Atenție la duplicate! Vrem o singură apariție pentru fiecare țară. În rezolvare, puteți folosi predicatul count/2 de mai jos.

count([], 0) :- !.
count([_ | T], Res) :-
    count(T, ResT),
    Res is ResT + 1.

Notă: în șablonul original apărea [('Germany',2), ('USA',3), ('UK',3), ('USA',3)] cu USA dublat — asta era tocmai capcana, trebuia să deduplicăm țările. Varianta deduplicată și sortată alfabetic este cea corectă.

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 (1 — apasă pe unul ca să îl rulezi, sau Verifică pentru toate)
?
countByCountries(Result). așteptat: Result = [('Germany',2),('UK',3),('USA',3)]