このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1339338438/607
#  [1] 授業単元:プログラミング演習 
#  [2] 問題文: 
#  品目1から品目4までの売値と売り上げ個数を、それぞれa[4]={1300, 2000, 2500, 3300};, b[4]={25, 18, 8, 5}; 
#  と初期化する。但し上記の二つの配列の要素番号0, 1, 2, 3のデータはそれぞれ品目1から4のものに対応する。 
#  このとき、品目別の売上高を求めるプログラムをポインタ配列を用いて作成せよ。 
#  

品目(品目1).
品目(品目2).
品目(品目3).
品目(品目4).

売値(品目1,1300).
売値(品目1,2000).
売値(品目3,2500).
売値(品目4,3300).

売り上げ個数(品目1,25).
売り上げ個数(品目2,18).
売り上げ個数(品目3,8).
売り上げ個数(品目4,5).

'品目1から品目4までの売値と売り上げ個数を、それぞれa[4]={1300, 2000, 2500, 3300};, b[4]={25, 18, 8, 5};と初期化する。但し上記の二つの配列の要素番号0, 1, 2, 3のデータはそれぞれ品目1から4のものに対応する。このとき、品目別の売上高を求める'(_品目,_売上高) :-
        品目ならびを得る(_品目ならび),
        売値ならびを得る(_品目ならび,_売値ならび),
        売り上げ個数ならびを得る(_品目ならび,_売り上げ個数ならび),
        品目別売上高を求める(_品目ならび,_売値ならび,_売り上げ個数ならび,_品目,_売上高).

品目ならびを得る(_品目ならび) :-
        findall(_品目,(
                    品目(_品目)),
                _品目ならび).

売値ならびを得る(_品目ならび,_売値ならび) :-
        findall(_売値,(
                    member(_品目,_品目ならび),
                    売値(_品目,_売値)),
                _売値ならび).

売り上げ個数ならびを得る(_品目ならび,_売り上げ個数ならび) :-
        findall(_売り上げ個数,(
                    member(_品目,_品目ならび),
                    売り上げ個数(_品目,_売り上げ個数)),
                _売り上げ個数ならび).


品目別売上高を求める(_品目ならび,_売値ならび,_売り上げ個数ならび,_品目,_売上高) :-
        between(0,3,Nth0),
        nth0(Nth0,_品目ならび,_品目),
        売上高を求める(Nth0,_売値ならび,_売り上げ個数ならび,_売上高).

売上高を求める(Nth0,_売値ならび,_売り上げ個数ならび,_売上高) :-
        nth0(Nth0,_売値ならび,_売値),
        nth0(Nth0,_売り上げ個数ならび,_売り上げ個数),
        _売り上げ高 is _売値 * _売り上げ個数.