Occurrences on the superficial level ?- count(a,[a,b,c,[a,c],a],R). R = 2 We can also generate a list with N identical elements ?- count(a,X,10). X = [a,a,a,a,a,a,a,a,a,a]
count(_,[],0). count(A,[A|L],N):- !,count(A,L,N1),N is N1+1. count(A,[_|L],N):- count(A,L,N).
Occurrences of an atom in a list on all levels ?- countt(a,[[[a],[c]],[c,a]],R). R = 2 ?- countt(a,[[[a],[b]],[c,a]],2). true. ?- countt(X,[a,b,c,[a,b,c,[a]]],3). X = a
countt(_,[],0). countt(A,[A|L],N):- !,countt(A,L,N1),N is N1+1. countt(A,[B|L],N):- atom(B),countt(A,L,N),!. countt(A,[B|L],N):- countt(A,B,N1),countt(A,L,N2),N is N1+N2.