我對Prolog練習有點問題。比較列表中出現元素的次數與給定的數字
假設我有一個獲得奧斯卡獎的演員名單。像這樣:
(steven spielberg, steven spielberg, francis ford coppola, michael curtiz)
當一個名字出現兩次,這意味着該人贏得了2個奧斯卡等等。我需要做的就是走線槽這個列表,找到每個演員贏得N以上的奧斯卡頒獎典禮,與謂語像
wonMoreOscars(Number, Activity):-
在數量是我們與列表進行比較的N個。 我已經擁有一個函數來計算出現在列表中的次數更多的人,以及該人在電影中具有的功能,但已被覆蓋。
有人可以幫我,我的代碼找到誰贏得了更多的奧斯卡獎的人:
occS([],_,_,_,_):-write(0),nl,write('+'),nl, !.
occS([H|T],_,_,_,_):-occ([H|T],0,0,H,H).
occ([],_,Top,_,Nome):-write(Nome),nl,write(Top),nl,write('+'),nl, !.
occ([H|T],Count,Top,El_corrente,_):- compare(=,H,El_corrente),C is Count + 1,C>=Top,occ(T,C,C,El_corrente,El_corrente), !.
occ([H|T],_,Top,El_corrente,Nome):- not(compare(=,H,El_corrente)),occ(T,1,Top,H,Nome),!.
occ([H|T],Count,Top,_,Nome):- C is Count + 1,occ(T,C,Top,H,Nome), !.
但現在我有這個情況麻煩。
只是一個側面說明:我認爲史蒂芬斯皮爾伯格從來沒有贏得過奧斯卡獎的演員:-) – svick 2011-05-25 20:30:27