我需要編寫一個小的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
一次。
我需要編寫一個小的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
一次。
我不想給你答案,所以我要去你幫助它:
% 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.
取決於你的努力和反饋,我可以幫你得到你的答案。
如果你想找到元素,最大出現:
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)).**
退房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
)更好地協調。
我們不只是給出答案。抓住最好的機會,發佈代碼以及任何錯誤消息,我們將幫助改進它。 – 2011-06-15 18:23:53