Please enable JavaScript.
Coggle requires JavaScript to display documents.
Não-determinismo no Método B - Coggle Diagram
Não-determinismo no Método B
Ideia central
Até agora os comandos eram determinísticos: mesmo estado e mesma entrada dão sempre o mesmo resultado
Com não-determinismo, a máquina pode escolher entre várias saídas
Serve para deixar decisões para depois, em fases mais avançadas do desenvolvimento
ANY … WHERE … THEN
Cria uma variável nova e escolhe um valor qualquer que satisfaça a condição
Ex.: ANY n WHERE n ∈ NAT1 THEN total := total * n
Pode usar mais de uma variável (ex.: soma de x e y)
Atribuição :: (pertence)
xx :: S escolhe um elemento qualquer do conjunto S
Faz o mesmo que um ANY, só que mais curto
Ex.: escolher um time de 11 jogadores dentro do elenco
CHOICE … OR …
Escolhe um comando qualquer entre vários
Ex.: a := 1 OR a := 2 OR a := 3
Os comandos de dentro também podem ser não-determinísticos
SELECT … WHEN … ELSE
Só escolhe entre as opções cuja condição (guarda) é verdadeira
Se nenhuma guarda for verdadeira, o comando fica inviável, e o ELSE resolve isso
Exemplo do clube: um sócio que joga tênis e croquet pode receber qualquer um dos dois como resposta
PRE (pré-condição)
Se a pré-condição falha, o comportamento fica imprevisível
Ex.: PRE x > 0 THEN x := y / x
O ProB bloqueia a operação quando a pré-condição é falsa
LET … BE … IN
Comando determinístico: cria uma variável local com um valor fixo
Equivale a um ANY onde a variável é igual à expressão
Exemplo final: Jukebox
Variáveis: créditos (com limite) e lista de músicas para tocar
pay: soma créditos, mas trava no limite
select: adiciona a música e, por escolha aleatória, pode ou não gastar crédito
play: toca uma música qualquer da lista e a remove
penalty: tira um crédito ou uma música, escolhida ao acaso