Closed drbeco closed 8 years ago
Professor, sempre que retira ;
, o agente para de andar.
Bruna, se você estivesse programando em C
e eu te falasse para retirar o ou
do comando if(a || b)
, o que você faria? Simplesmente colocaria if(ab)
, ou if(a && b)
? Claro que não! Tem que pensar na solução.
O que eu recomendei em sala é que se você quiser um "ou" em PROLOG, é para fazer duas clausulas.
Método 1:
exemplo_ou(X) :-
X == 4 ;
X == 5.
Método dois:
exemplo_ou(4).
exemplo_ou(5).
Além disso, caso muito necessário usar o ;
, é para colocar parênteses no que são os argumentos do ou. Exemplo: a ou b e c
pode ser (a ou b) e c
ou a ou (b e c)
.
Seu predicado não tem parênteses.
Acrescento:
O predicado run_agent
é para ser um conjunto de atividades que seu programa faz e retorna para o simulador. Não precisa de ou
ali.
run_agent :- se :- faz isso, e isso, e isso, e isso, e ponto.
Não é preciso dizer:
run_agent :- se :- faz isso, e isso, e isso, e isso, ou se faz isso outro e ponto.
Este é um erro de lógica, no qual vocês estão colocando atividades que não pertencem ao predicado em questão.
Este bug agora atingiu também o ramo master.
Resolvido! :smile:
Não use
;
como ou na funçãorun_agent
.Se for realmente necessário, é preciso deixar bem claro, com parênteses, quais os argumentos que são do
ou
.Neste caso, o predicado
ouro
deveria ser apenas mais uma opção do predicadoagente_movimento
, e não algo separado dele.A lógica fica mais limpa assim.