Troco para um dólar
Este programa Prolog simples verifica ou gera trocos que somam um dólar que consiste em half-dollars (50 centavos), quarters (25 centavos), dimes (10 centavos), nickels (5 centavos), e pennies (1 centavo).
change([H,Q,D,N,P]) :-
member(H,[0,1,2]), /* Half-dollars */
member(Q,[0,1,2,3,4]), /* quarters */
member(D,[0,1,2,3,4,5,6,7,8,9,10]) , /* dimes */
member(N,[0,1,2,3,4,5,6,7,8,9,10, /* nickels */
11,12,13,14,15,16,17,18,19,20]),
S is 50*H + 25*Q +10*D + 5*N,
S =< 100,
P is 100-S.
Vários tipos de objetivos são possíveis; por exemplo
?- change([H,Q,D,N,P]).
...
irá listar todas as maneiras possíveis de dar troco por um dólar (experimente!), e
?- change([0,2,3,4,6]).
no
já que 2 quarters, 3 dimes, 4 nickels, e 6 pennies não geram um dólar, e
?- change([0,2,3,2,P]).
P=10
A característica mais importante deste exemplo é mostrar como o membro pode ser usado para gerar escolhas para valores de alguma variável a fim de satisfazer alguma restrição !!! O mecanismo de backtracking do Prolog então segue automaticamente cada uma das alternativas. Essa metodologia será aplicada na próxima seção e em muitos exemplos subsequentes em seções posteriores.
Veja Também
- Código do Prolog para esta seção.
- 2.9 Redux da coloração de mapas
- Prolog Tutorial Sumário