このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1296387672/274
#  [1] 授業単元:プログラミング実習 
#  [2] 問題文(含コード&リンク):http://ime.nu/www.dotup.org/uploda/www.dotup.org1324335.txt.html 
#  
#  商品(data1.txt)と在庫(data2.txt)からデータを読み込み
#  商品名を入力すると、ID、単価、在庫総数、総在庫額を出力するプログラムの作成
#  それぞれを構造体に読み込んでから探索、計算をお願いします
#  
#  ファイル様式
#  data1.txtは上からID、商品名、単価の順番で並んでいます
#  data2.txtは上からID、在庫数の順番で並んでいます
#  
#  data1.txt
#  1
#  マウス
#  780
#  2
#  キーボード
#  980
#  3
#  ボールペン
#  120
#  4
#  えんぴつ
#  80
#  5
#  イヤホン
#  790
#  
#  data2.txt
#  1
#  15
#  2
#  10
#  3
#  23
#  4
#  40
#  5
#  5

'商品(data1.txt)と在庫(data2.txt)からデータを読み込み商品名を入力すると、ID、単価、在庫総数、総在庫額を出力する' :-
        '商品(data1.txt)と在庫(data2.txt)からデータを読み込み'(_商品データならび,_在庫データならび),
        商品名を入力すると、ID、単価、在庫総数、総在庫額を出力する(_商品データならび,_在庫データならび).

'商品(data1.txt)と在庫(data2.txt)からデータを読み込み'(_商品データならび,_在庫データならび) :-
        '商品(data1.txt)を読み込む'(_商品データならび),
        '在庫(data2.txt)を読み込む'(_在庫データならび).

'商品(data1.txt)を読み込む'(_商品データならび) :-
        get_lines('data1.txt',_商品データならび).

'在庫(data2.txt)を読み込む'(_在庫データならび) :-
        get_lines('data1.txt',_在庫データならび).

商品名を入力すると、ID、単価、在庫総数、総在庫額を出力する(_商品データならび,_在庫データならび) :-
        商品名を入力すると(_商品名),
        'ID、単価、在庫総数、総在庫額を出力する'(_商品名,_商品データならび,_在庫データならび),!.
商品名を入力すると、ID、単価、在庫総数、総在庫額を出力する(_商品データならび,_在庫データならび) :-
        商品名を入力すると、ID、単価、在庫総数、総在庫額を出力する(_商品データならび,_在庫データならび).

商品名を入力すると(_商品名) :-
        write('商品名を入力してください : '),
        get_line(_商品名).

'ID、単価、在庫総数、総在庫額を出力する'('',_,_) :- !.
'ID、単価、在庫総数、総在庫額を出力する'(end_of_file,_,_) :- !.
'ID、単価、在庫総数、総在庫額を出力する'(_商品名,_商品データならび,_在庫データならび) :-
        append(_,[[_ID,_商品名,_単価]|_],_商品データならび),
        findsum(_在庫数,append(_,[[_ID,_在庫数]|_],_在庫データならび),_在庫総数),
        _総在庫額 is truncate(_在庫総数 * _単価),
        write_formatted('%t,%t,%t,%t\n',[_ID,_単価,_在庫総数,_総在庫額]),
        fail.
'ID、単価、在庫総数、総在庫額を出力する'(_商品名,_商品データならび,_在庫データならび) :-
        \+(append(_,[[_ID,_商品名,_単価]|_],_商品データならび)),
        write_formatted('入力された商品名%tは商品データの中に存在しません。再入力をお願いします。\n',[_商品名]),
        fail.