DarwinBotsManual
Abrir la app EnglishEN

Lógicos

Los operadores de la pila booleana: and, or, xor y not para combinar condiciones, true y false, y las herramientas para acomodar esa pila.

Costo: Lógica

OperadorQué hace
andReemplaza los dos valores de arriba de la pila booleana por uno: verdadero solo si los dos lo son.
orReemplaza los dos valores de arriba de la pila booleana por uno: verdadero si alguno lo es. La única forma de pedir «esto o aquello».
xorReemplaza los dos valores de arriba de la pila booleana por uno: verdadero si exactamente uno de los dos lo es.
notInvierte el valor de arriba de la pila booleana: verdadero pasa a falso y falso a verdadero. Sobre la pila vacía da falso.
trueApila un verdadero en la pila booleana. Dentro del cuerpo de un gen, vuelve a habilitar los stores que una condición había frenado.
falseApila un falso en la pila booleana. En la condición de un gen lo apaga; en el cuerpo frena los stores que siguen.
dropboolSaca y descarta el valor de arriba de la pila booleana. Dentro del cuerpo, termina el efecto de una condición en línea.
clearboolVacía la pila booleana. Como vacía cuenta como verdadera, todos los stores que siguen vuelven a escribir.
dupboolDuplica el valor de arriba de la pila booleana. Sirve para guardar una condición y usarla de nuevo, por ejemplo para anidar condiciones en el cuerpo.
swapboolIntercambia los dos valores de arriba de la pila booleana. Permite calcular dos condiciones y elegir cuál manda en cada tramo del cuerpo.
overboolApila una copia del segundo valor de la pila booleana: a b pasa a a b a. Con un solo valor apila verdadero.

Los lógicos trabajan solo con la pila booleana, la de verdaderos y falsos que llenan las comparaciones. No tocan la pila entera. Son de tres clases:

Entre cond y start el que más hace falta es or, porque el y ya lo pone el start, que une con y todo lo que quede en la pila booleana.

Dentro del cuerpo de un gen cambian de papel: cada store mira el valor de arriba de la pila booleana y, si es falso, no escribe (lo cuenta Condiciones en línea). Ahí not, true, dropbool y clearbool sirven para decidir qué stores corren. Este bot avanza si ve algo con el ojo del medio (.eye5) y, si no, gira; al final deja la pila limpia para el gen que siga:

' si ve algo, avanza; si no, gira
cond
start
  *.eye5 0 >
  20 .up store
  not
  60 .aimdx store
  clearbool
stop

Una regla vale para todos: la pila booleana vacía cuenta como verdadera. Cuando a un operador le falta un operando, lo reemplaza por verdadero, y por eso algunos dan resultados que sorprenden con la pila vacía o con un solo valor: not sobre la pila vacía da falso, y or con un único valor da siempre verdadero. Cada página lo detalla, y el panorama de las dos pilas está en La pila entera y la booleana.

Cada operador lógico ejecutado cobra el costo Lógica de la configuración del escenario.