collCount/2
リスト内の同一のアイテムをそれぞれの出現回数でタプルにグループ化する再帰ルールを作成しようとしています。
たとえば、 とcollCount([a,b,a,b,c,b],F)
バインドF
し[(a,2),(b,3),(c,1)]
ます。このクエリを実行すると、Prolog は単純に を返しますno
。
以下は、私がこれまでになんとかしたことです:
collCount([H|T],[(H,N)|L2]) :-
countDel(H,[H|T],L,N),
collCount(L,L2).
countDel(X,T,Rest,N) :-
occur(X,T,N),
delAll(X,T,Rest).
occur(_,[],0).
occur(X,[X|T],N) :-
occur(X,T,NN),
N is NN + 1.
occur(X,[H|T],N) :-
occur(X,T,N),
X \= H.
delAll(_,[],[]).
delAll(X,[X|T],Ans) :-
delAll(X,T,Ans).
delAll(X,[H|T],[H|Rest]) :-
delAll(X,T,Rest),
X \= H.
述語countDel/4
は、リスト内の特定の項目のすべての出現をカウントして削除します。たとえば、countDel(2,[1,2,3,2,2],L,N)
は L を[1,3]
およびN
とバインドし3
ます。
述語occur/3
は、リスト内の特定の項目のすべての出現をカウントします。たとえば、 とoccur(3,[1,2,3,4,3],Num)
バインドNum
し2
ます。
述語delAll/3
は、リスト内の特定の項目のすべての出現を削除します。たとえば、 とdelAll(3,[1,2,3,4,3],L)
バインドL
し[1,2,4]
ます。
どんな助けでも大歓迎です。