2011-06-15 84 views
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發生2次和cd一次。

+5

我們不只是給出答案。抓住最好的機會,發佈代碼以及任何錯誤消息,我們將幫助改進它。 – 2011-06-15 18:23:53

回答

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

如果你想找到元素,最大出現:

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)).** 
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)更好地協調。