aronsales / wumpusgrp4

Repositório criado para desenvolvimento do wumpus.
GNU General Public License v3.0
0 stars 0 forks source link

ou (;) #30

Closed drbeco closed 8 years ago

drbeco commented 8 years ago

Não use ; como ou na função run_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 predicado agente_movimento, e não algo separado dele.

A lógica fica mais limpa assim.

bmhori commented 8 years ago

Professor, sempre que retira ; , o agente para de andar.

drbeco commented 8 years ago

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.

drbeco commented 8 years ago

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.

drbeco commented 8 years ago

Este bug agora atingiu também o ramo master.

bmhori commented 8 years ago

Resolvido! :smile: