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

4
我需要编写一个小的Prolog程序,来统计列表中每个元素出现的次数。
numberOfRepetition(input, result)

例如:

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

可以满足条件 X=[a/3,b/2,d/1,c/1],因为 a 出现了三次,b出现了两次,cd各出现了一次。


5
我们不仅仅是提供答案。尽你最大努力试着写出代码,附上错误信息,我们会帮助你完善它,并使其更易理解。 - Jacob Mattison
3个回答

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

请查看我的答案,针对问题“如何在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)进行互操作。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接