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).