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.