Troco para um dólar

De Augusto Baffa Wiki
Ir para navegação Ir para pesquisar

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