% Count count(_,[],0). count(Num,[H|T],Cnt) :- Num = H, count(Num,T,Z), Cnt is Z + 1. count(Num,[H|T],Cnt) :- Num =\= H, count(Num,T,Cnt). % Singleton count singleton_count([],0). singleton_count(List,Cnt):- single(List,10,C2), Cnt is C2. single(_,0,0). single(List,A,Num):- B is A-1, count(A,List,Cnt), Cnt=1, single(List,B,C2), Num is C2+1. single(List,A,Num):- B is A-1, single(List,B,Num). % Doubleton count doubleton_count([],0). doubleton_count(List,Cnt):- double(List,10,C2), Cnt is C2. double(_,0,0). double(List,A,Num):- B is A-1, count(A,List,Cnt), Cnt=2, double(List,B,C2), Num is C2+1. double(List,A,Num):- B is A-1, double(List,B,Num).