10/02/02 21:11:17
>>579
% Prolog (その一)
金種計算(0,_,[]) :- !.
金種計算(_おつり残高,[],[]) :- _おつり残高 > 0,write('レジ不足です\n'),!,fail.
金種計算(_おつり残高,[_金種|R1],[(_金種,B)|R2]) :-
_おつり残高 >= _金種,
金種が足りる(_おつり残高,_金種,N,B),
_残り金額 is _おつり残高 mod _金種,
金種計算(_残り金額,R1,R2).
金種計算(_おつり残高,[_金種|R1],[(_金種,N)|R2]) :-
_おつり残高 >= _金種,
金種が足りない(_おつり残高,_金種,N,B),
_残り金額 is _おつり残高 - _金種 * N,
金種計算(_残り金額,R1,R2).
金種計算(_おつり残高,[_金種|R1],R2) :-
_おつり残高 >= _金種,
\+(レジの中(_金種,N)),
金種計算(_おつり残高,R1,R2).
金種計算(_おつり残高,[_金種|R1],R2) :-
_おつり残高 < _金種,
金種計算(_おつり残高,R1,R2).
金種が足りる(_おつり残高,_金種,N,B) :-
レジの中(_金種,N),
B is _おつり残高 // _金種,
N >= B,!.
金種が足りない(_おつり残高,_金種,N,B) :-
レジの中(_金種,N),
B is _おつり残高 // _金種,
N < B,!.