我需要编写一个小的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次,c
和d
出现了一次。
答案 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)).**