Next: Autómatos Finitos Não-Deterministas Up: AFDs com acções semânticas Previous: Simulação do funcionamento de

Simulação do funcionamento de um multi-banco

Pretende-se criar um modelo, muito simplificado, que descreva o funcionamento de um multi-banco. Tal modelo deve permitir uma interacção como a que se segue.

         ?- aceita(mb,[cartao,codigo,levantar,5,aceitar]).
            Retire os seus 5000$00
            Retire o talao
            Retire o seu cartao
            Volte sempre
            Yes
         ?- aceita(mb,[cartao,codigo,consultar,movimentos,aceitar]).
            Retire o talao de movimentos
            Retire o seu cartao
            Volte sempre
            Yes
         ?- aceita(mb,[cartao,codigo,consultar,interromper]).
            Retire o seu cartao
            Volte sempre
            Yes
         ?- aceita(mb,[cartao,codigo,consultar]).
            No
         ?- aceita(mb,[cartao,codigo,consultar,aceitar]).
            No

. Eis o programa Prolog.

 % simulacao do funcionamento de um multibanco por um automato reactivo
% versao simplificada: 19/Maio/1999

         estadoInicial(mb,0).
         estadoFinal(mb,0).

         delta(mb,0,cartao,1).
         delta(mb,1,codigo,2).
         delta(mb,2,levantar,3).
         delta(mb,3,15,4). % 15 contos
delta(mb,4,aceitar,0) :-
           msg(15),
           msg.
         delta(mb,3,10,5). % 10 contos
delta(mb,5,aceitar,0) :-
           msg(10),
           msg.
         delta(mb,3,5,6). %  5 contos
delta(mb,6,aceitar,0) :-
           msg(5),
           msg.
         delta(mb,2,consultar,7).
         delta(mb,7,saldo,8).
         delta(mb,8,aceitar,0) :-
           write('Retire o talao'), nl,
           msg.
         delta(mb,7,movimentos,9).
         delta(mb,9,aceitar,0) :-
           write('Retire o talao de movimentos'), nl,
           msg.
         delta(mb,_,interromper,0) :- % em qualquer estado,
msg. % podemos sempre cancelar

         msg(D) :-
           write('Retire os seus '),
           write(D), write('000$00'), nl,
           write('Retire o talao'), nl.
         msg :-
           write('Retire o seu cartao'), nl,
           write('Volte sempre'), nl.




1999-05-20