studie(jan,informatica).
studie(marie,wiskunde).
studie(klaas,wiskunde).
studie(klaas,informatica).
studie(anna,informatica).
studie(anna,wiskunde).

dubbel1(X) :-
	studie(A,S1),
	studie(B,S2),
	S1='informatica',
	S2='wiskunde',
	A=B,
	X=A.

dubbel2(X) :-
	studie(A,informatica),
	studie(B,wiskunde),
	A=B,
	X=A.

dubbel3(X) :-
	studie(A,informatica),
	studie(A,wiskunde),
	X=A.

dubbel4(X) :-
	studie(X,informatica),
	studie(X,wiskunde).

resultaten(anna,[res('Programmeermethoden',8),res('Fundamentele Informatica',7),res('Logica',8)]).

gemiddelde(Naam,Gem) :-
	resultaten(Naam,L),
	vakkenlijst(Totaal,Aantal,L),
	Gem is Totaal/Aantal.

vakkenlijst(Cijfer,1,[res(_,Cijfer)]).
/* alternatief basisgeval
vakkenlijst(0,0,[]).
*/

vakkenlijst(Totaal,Aantal,[res(_,Cijfer)|L]) :-
	vakkenlijst(Totaal1,Aantal1,L),
	Totaal is Totaal1+Cijfer,
	Aantal is Aantal1+1.

gemiddelde_f(Naam,Gem) :-
	resultaten(Naam,L),
	vakkenlijst_f(Totaal,Aantal,L),
	Gem is Totaal/Aantal.

vakkenlijst_f(Totaal,Aantal,L) :-
	L=[res(_,Cijfer)],
	Aantal=1,
	Totaal=Cijfer.

vakkenlijst_f(Totaal,Aantal,L) :-
	L=[H|T],
	vakkenlijst(Totaal1,Aantal1,T),
	H=res(_,Cijfer),
	Totaal is Totaal1+Cijfer,
	Aantal is Aantal1+1.
