1

プロローグが初めてなので、質問は簡単かもしれませんが、答えが見つかりませんでした。誰か助けてください。

ただ欲しい

カウント関数 st

count([c,c,a,a,b,b,d,a,c,b,d,d,a], O).

リストメンバーの出現回数を返します。

 O = [[a, 4], [b, 3], [c, 3], [d, 3]]
4

2 に答える 2

2

以下は、「リスト内の重複を削除する(プロローグ)」に対する私の以前回答、質問「AUBUCのプロローグユニオン」に対するこの以前の回答に基づいています。

list_item_subtracted_count0_count/5から導出されlist_item_subtracted/3ます。 list_counts/2は から派生しておりlist_setB/2、どちらもここで定義されています

list_item_subtracted_count0_count([], _, [], N,N)。
list_item_subtracted_count0_count([A|As], E, Bs1, N0,N) :-
   if_ (A = E,
       ( Bs1 = Bs 、N1 は N0+1 )、
       ( Bs1 = [A|Bs], N1 = N0 )),
   list_item_subtracted_count0_count(As, E, Bs, N1,N).

list_counts([], [])。
list_counts([X|Xs], [XN|Ys]) :-
   list_item_subtracted_count0_count(Xs, X, Xs0, 1,N),
   list_counts(Xs0, Ys)。

OPが提供したクエリは次のとおりです。

?- list_counts([c,c,a,a,b,b,d,a,c,b,d,d,a], Xss).
Xss = [c-3,a-4,b-3,d-3].                    % succeeds deterministically

X-Ninのペアの順序は、 in の最初の出現に対応することに注意してCountsください。XXs

?- list_counts([ a ,b,c,d], Xss).
Xss = [ a -1,b-1,c-1,d-1].

?- list_counts([d,c,b, a ], Xss)。
Xss = [d-1,c-1,b-1, a -1].

最後に、考えられるすべてのリストを考えてみましょうEs— 長さの昇順で公平に列挙します:

?-長さ(Es、N)、list_counts(Es、Xss)。
   N = 0、エス = []、Xss = []
; N = 1、Es = [A]、Xss = [A-1]
; N = 2、Es = [A、A]、Xss = [A-2]
; N = 2、Es = [A、B]、Xss = [A-1、B-1]、dif(B、A)
; N = 3、Es = [A、A、A]、Xss = [A-3]
; N = 3、Es = [A、A、B]、Xss = [A-2、B-1]、dif(B、A)
; N = 3、Es = [A、B、A]、Xss = [A-2、B-1]、dif(B、A)
; N = 3、Es = [B、A、A]、Xss = [B-1、A-2]、dif(A、B)、dif(A、B)
; N = 3、Es = [A、B、C]、Xss = [A-1、B-1、C-1]、dif(C、A)、dif(C、B)、dif(B、A)
...
于 2015-05-04T09:48:28.677 に答える
0
co(X,L) :- co(X,[],L).

co([],A,A).
co([X|Xs], A, L) :- p(X-Z,A,R), !, Z1 is Z+1, co(Xs, [X-Z1|R], L). 
co([X|Xs], A, L) :- co(Xs, [X-1|A], L). 

p(X-Y,[X-Y|R],R):- !.
p(X,[H|Y], [H|Z]) :- p(X,Y,Z).

あまり意味のある名前は意図的に使用していません。それぞれの述語が何をするのかを理解するようにしてください。

于 2012-05-27T20:26:37.907 に答える