このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1337692704/48
#  【課題】売り上げをコード事に個別に集計した後に全体の合計を出しなさい。 
#     <エリアコード> <県コード> <地区コード> 
#      A  \5000          C \4000      E  \7000  
#          A  \90000         C  \6500      E  \8000 
#          A  \7500          C  \5500      E  \4000 
#          A  \6000          C  \3000      F  \2000 
#          A  \3500          C  \9000      F  \6500 
#          A  \4200          C  \4500      F  \3000 
#          A  \3500          D  \8000      E  \3000 
#          A  \40000         D  \9500      E  \4880 
#          B  \3500          C  \8000      E  \4500 
#          B  \4200          C  \9500      E  \5000 
#   
#  【形態】javaアプリケーション 
#  【期限】6/12 お昼  
#  【Ver 】java version "1.7.0_02"  
#  【補足】キーブレイクの処理の参考書がなくて進みません。 
#  ACEから切り替わるときに<E地区合計> 
#  ACFから切り替わるときに<F地区合計><C県合計> 
#  ADEから切り替わるときに<E地区合計><D県合計><Aエリア合計> 
#  BCEの後に       <E地区合計><C県合計><Bエリア合計> 
#  最後に<A+Bエリア合計>を出力する形でお願いします。 
# 
# 

売り上げ('A',5000,'C',4000,'E',7000).  
売り上げ('A',90000'C',6500','E',8000).
売り上げ('A',7500,'C',5500,'E',4000).
売り上げ('A',6000,'C',3000,'F',2000).
売り上げ('A',3500,'C',9000,'F',6500).
売り上げ('A',4200,'C',4500,'F',3000).
売り上げ('A',3500,'D',8000,'E',3000),
売り上げ('A',40000,'D',9500,'E',4880).
売り上げ('B',3500,'C',8000,'E',4500).
売り上げ('B',4200,'C',9500,'E',5000).

'エリアコード鍵'(_鍵ならび) :-
        findsetof(_エリアコード,(
                    売り上げ(_エリアコード,_,_,_,_,_)),
                _鍵ならび).

'エリアコード・県コード鍵'(_鍵ならび) :-
        findsetof([_エリアコード,_県コード],(
                    売り上げ(_エリアコード,_,_県コード,_,_,_)),
                _鍵ならび).

'エリアコード・県コード・地区コード鍵'(_鍵ならび) :-
        findsetof([_エリアコード,_県コード,_地区コード],(
                    売り上げ(_エリアコード,_,_県コード,_,_地区コード,_)),
                _鍵ならび).

売り上げを表示する :-
        'エリアコード鍵'(_鍵ならび_1),
        'エリアコード・県コード鍵'(_鍵ならび_2),        
        'エリアコード・県コード・地区コード鍵'(_鍵ならび_3),
        売り上げ集約を表示する(_鍵ならび_1,_鍵ならび_2,_鍵ならび_3).


売り上げ集約を表示する([],_鍵ならび_2,_鍵ならび_3) :-
        findsum(_金額_1,(
                    売り上げ(_,_金額_1,_,_,_,_)),
                合計金額),
        writef('全エリア合計 %t 円\n',[_合計金額]),!.
売り上げ集約を表示する([_エリア鍵|R1],_鍵ならび_2,_鍵ならび_3) :-
        エリアで分類する(_エリア鍵,_鍵ならび_2,_鍵ならび_3),
        売り上げを表示する(R1,_鍵ならび_2,_鍵ならび_3).

エリアで分類する(_エリア鍵,[],_) :-
        findsum(_金額_1,(
                    売り上げ(_エリア鍵,_金額_1,_,_,_,_)),
                _合計金額),
        writef('%tエリア合計 %t 円\n',[_エリア鍵,_合計金額]),!.
エリアで分類する(_エリア鍵,[[_エリア鍵,_県鍵]|R2],_鍵ならび_3) :-
        県で分類する(_エリア鍵,_県鍵,_鍵ならび_3),
        エリアで分類する(_エリア鍵,R2,_鍵ならび_3).

県で分類する(_エリア鍵,_県鍵,[]) :-
        findsum(_金額_2,(
                    売り上げ(_エリア鍵,_1,_県鍵,_金額_2,_,_3)),
                _合計金額),
        writef('%t県合計 %t 円\n',[_県鍵,_合計金額]),!.
県で分類する(_エリア鍵,_県鍵,[[_エリア鍵,_県鍵,_地区鍵]|R3]) :-
        findsum(_金額_3,(
                    売り上げ(_エリア鍵,_1,_県鍵,_2,_地区鍵,_金額_3)),
                _合計金額),
        writef(\n'%t%t合計 %t 円 ',[_地区鍵,地区,_合計金額]),
        県で分類する(_エリア鍵,_県鍵,R3).
県で分類する(_エリア鍵,_県鍵,[_|R3]) :-
        県で分類する(_エリア鍵,_県鍵,R3).