Vamos agora tentar modelar, por meio de um AFD reactivo, uma máquina de vender café. Vamos considerar que cada café custa 80$00; que se aceitam moedas de 10$00, 20$00 e 50$00; que a máquina é capaz de dar o troco; e por fim produzir um café saboroso. Outras moedas, que não as aceites, devem ser devolvidas. Neste caso S é o conjunto das moedas; a palavra de entrada será uma sequência de moedas que chega à máquina; os estados corresponderão ao total de dinheiro inserido na máquina até ao momento. O estado inicial será então o estado 0$00 e os estados finais todos aqueles que correspondem a uma quantidade D de dinheiro igual ou superior ao preço do café: . Quando se alcança um estado final D, serão despoletadas as seguintes duas acções (acções semânticas): dar o troco D - 80$00; preparar e dar o café. As acções semânticas são indicadas nos arcos do diagrama do autómato entre . O autómato cafe encontra-se descrito pelo seguinte programa Prolog: (não deixe de fazer o diagrama correspondente)
estadoInicial(cafe,0).
estadoFinal(cafe,D) :-
D >= 80,
actua(D).
actua(80) :- fazCafe.
actua(D) :- daTroco(D), fazCafe.
daTroco(D) :-
T is D - 80,
write('Troco = '), write(T), write('Esc.'), nl.
fazCafe :- write('Espero que goste do cafe...').
delta(cafe,EC,10,PE) :- PE is EC + 10.
delta(cafe,EC,20,PE) :- PE is EC + 20.
delta(cafe,EC,50,PE) :- PE is EC + 50.
delta(cafe,EC,M,_) :- % M e' uma moeda na~o aceite pela m'aquina
D is EC + M, % D e' o dinheiro a devolver
erro(D),!, % devolve moedas
fail. % a sequencia de moedas na~o e' reconhecida
erro(D) :-
write('Fica com o teu dinheiro = '),
write(D), write('Esc.'), nl.
Eis alguns exemplos de ``utilização da máquina de café'':
?- aceita(cafe,[50,50]).
Troco = 20Esc.
Espero que goste do cafe...
Yes
?- aceita(cafe,[20,10,20,20,10]).
Espero que goste do cafe...
Yes
?- aceita(cafe,[20,100]).
Fica com o teu dinheiro = 120Esc.
No