Exerciții Model parțial, Exercițiul 2

employee_average_salary/2

Model parțial, Exercițiul 2 advanced Recursivitate pe listeCut (!) și cazuri de bază

Primind o listă identică celei de la Exercițiul 1, dar cu apariții multiple ale unui angajat (considerând că fiecare intrare reprezintă salariul într-o anumită lună), determinați salariul mediu al fiecărui angajat.

De exemplu, dacă peter apare ca employee_salary(peter, 1000) și employee_salary(peter, 1200), în lista de rezultat va fi doar (peter, 1100).

?- employee_average_salary([employee_salary(peter, 1000), employee_salary(oliver, 1200),
                             employee_salary(sam, 700), employee_salary(oliver, 800),
                             employee_salary(sam, 900), employee_salary(sandra, 4500),
                             employee_salary(peter, 1200), employee_salary(oliver, 400)], Result).
Result = [(peter, 1100), (oliver, 800), (sam, 800), (sandra, 4500)]

Hint: pentru fiecare angajat calculezi suma și numărul de apariții (sum_and_count_by_name/4), apoi media. După ce ai procesat un angajat, elimini toate intrările lui din listă (remove_by_name/3) și reapelezi pe lista redusă.

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)
?
employee_average_salary([employee_salary(peter,1000), employee_salary(oliver,1200), employee_salary(sam,700), employee_salary(oliver,800), employee_salary(sam,900), employee_salary(sandra,4500), employee_salary(peter,1200), employee_salary(oliver,400)], R). așteptat: R = [(peter,1100.0),(oliver,800.0),(sam,800.0),(sandra,4500.0)]