如何计算列表中的元素数量?

时间:2011-06-15 18:20:03

标签: list prolog

我需要编写一个小的Prolog程序来计算列表中每个元素的出现次数。

numberOfRepetition(input, result)

例如:

numberOfRepetition([a,b,a,d,c,a,b], X)

X=[a/3,b/2,d/1,c/1]感到满意,因为a出现了三次,b出现了2次,cd出现了一次。

3 个答案:

答案 0 :(得分:4)

我不想给你答案,所以我会帮助你:

% Find the occurrences of given element in list
%
% occurrences([a,b,c,a],a,X).
% -> X = 2.

occurrences([],_,0).
occurrences([X|Y],X,N):- occurrences(Y,X,W),N is W + 1.
occurrences([X|Y],Z,N):- occurrences(Y,Z,N),X\=Z.

根据您的努力和反馈,我可以帮助您获得答案。

答案 1 :(得分:1)

查看my answer相关问题" How to count number of element occurrences in a list in Prolog"! 在那个答案中,我提出了谓词list_counts/2,这应该符合你的需要。

样品使用:

:- list_counts([a,b,a,d,c,a,b],Ys).
Ys = [a-3, b-2, d-1, c-1].

请注意,此谓词对表示多重性的键值对使用略有不同的表示形式:主要仿函数(-)/2而不是(/)/2

如果可能,请使用(-)/2切换到表示,以便更好地与标准库谓词(如keysort/2)进行互操作。

答案 2 :(得分:-1)

如果您希望找到具有最大出现次数的元素:

occurrences([],_,0).
occurrences([X|Y],X,N):- occurrences(Y,X,W),N is W + 1.
occurrences([X|Y],Z,N):- occurrences(Y,Z,N),X\=Z.

**make_list(Max):-
   findall((Num,Elem),occurrences([d,d,d,a,a,b,c,d,e],Elem,Num),L),
   sort(L,Sorted),
   last(Sorted,(_,Max)).**