- 152 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 19:57:09 ]
- >>151
% Prolog は集約は得意としない。その場でこの述語を考えるのは負担が大きいので、 % 以下のような準備が必要だろう。SQLのcount(*)を解決する処理だが。 集約_数_逆順ならび([],L,L) :- !. 集約_数_逆順ならび([A|R1],L1,L) :- \+(member([_,A],L1)), 集約_数_計測(A,R1,L2,1,Count), 逆順整列([Count,A],L1,L3), 集約_数_逆順ならび(L2,L3,L),!. 集約_数_計測(_,[],[],Count,Count) :- !. 集約_数_計測(A,[A|R1],L2,Count1,Count) :- Count2 is Count1 + 1, 集約_数_計測(A,R1,L2,Count2,Count),!. 集約_数_計測(A,[B|R1],[B|R2],Count1,Count) :- \+(A = B), 集約_数_計測(A,R1,R2,Count1,Count),!. 逆順整列(L,[],[L]) :- !. 逆順整列(L,[L1|R1],[L,L1|R1]) :- L @>= L1,!. 逆順整列(L,[L1|R1],[L1|R2]) :- 逆順整列(L,R1,R2).
|

|