このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1308749241/873
#  [1] 授業単元:考えるC言語基礎 
#  [2] 問題文: 金額を入力すると、貨幣及び硬貨の合計枚数が最も少なくなるように 
#  一万円札、5千、千、500円玉、100、50、10,5,1円玉に分け、それぞれの枚数 
#  を出力するプログラムを作成せよ 
#  

'金額を入力すると、貨幣及び硬貨の合計枚数が最も少なくなるように一万円札、5千、千、500円玉、100、50、10,5,1円玉に分け、それぞれの枚数を出力する'(_金額) :-
        '一万円札、5千、千、500円玉、100、50、10,5,1円玉に分け、それぞれの枚数を'(_金額,[10000,5000,1000,500,100,50,10,5,1],_必要枚数ならび),
        出力する(_必要枚数ならび).

'一万円札、5千、千、500円玉、100、50、10,5,1円玉に分け、それぞれの枚数を'(_,[],[]).
'一万円札、5千、千、500円玉、100、50、10,5,1円玉に分け、それぞれの枚数を'(_金額,[_金種|R1],[[_金種,_枚数]|R2]) :-
        _枚数 is _金額 // _金種,
        _金額2 is _金額 mod _金種,
        '一万円札、5千、千、500円玉、100、50、10,5,1円玉に分け、それぞれの枚数を'(_金額2,R1,R2).

出力する(_必要枚数ならび) :-
        append(_,[[_金種,_枚数]|R],_必要枚数ならび),
        writef('%t %t枚\n',[_金種,_枚数]),
        R = [],
        write('\n').