prolog中列表中的原子和整数

prolog中列表中的原子和整数,prolog,Prolog,如何为以下输出编写规则 ?- atoms_and_integers([a,b,1,2]) 输出: Number of Atoms:2 Number of integers:2 假设这不是家庭作业,在这种情况下,我不想成为犯罪的合伙人,我会说,任何人都可以出于任何目的自由使用以下代码,而不是在家庭作业上作弊:-) 我知道这对你的作业没什么帮助,但我是library()的粉丝 (+1)我从你那里学到了比任何人都多的aggregate/3。) atoms_and_integers(L) :-

如何为以下输出编写规则

?- atoms_and_integers([a,b,1,2])
输出:

Number of Atoms:2
Number of integers:2

假设这不是家庭作业,在这种情况下,我不想成为犯罪的合伙人,我会说,任何人都可以出于任何目的自由使用以下代码,而不是在家庭作业上作弊:-)


我知道这对你的作业没什么帮助,但我是library()的粉丝

(+1)我从你那里学到了比任何人都多的
aggregate/3
。)
atoms_and_integers(L) :-
    atoms_and_integers_aux(L, Atoms, Integers),
    writeln(['Atoms: ', Atoms]),
    writeln(['Integers: ', Integers]).

atoms_and_integers_aux([], 0, 0).
atoms_and_integers_aux([H|T], Atoms, Integers) :-
    atom(H), !,
    atoms_and_integers_aux(T, AtomsT, Integers),
    Atoms is AtomsT + 1.    
atoms_and_integers_aux([H|T], Atoms, Integers) :-
    integer(H), !,
    atoms_and_integers_aux(T, Atoms, IntegersT),
    Integers is IntegersT + 1.    
atoms_and_integers_aux([_H|T], Atoms, Integers) :-
    atoms_and_integers_aux(T, Atoms, Integers).
atoms_and_integers(L, NAs, NIs) :-
    aggregate(count, E^(member(E, L), atom(E)), NAs),
    aggregate(count, E^(member(E, L), integer(E)), NIs).