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
| Operador | Qué hace |
|---|---|
and | Reemplaza los dos valores de arriba de la pila booleana por uno: verdadero solo si los dos lo son. |
or | Reemplaza los dos valores de arriba de la pila booleana por uno: verdadero si alguno lo es. La única forma de pedir «esto o aquello». |
xor | Reemplaza los dos valores de arriba de la pila booleana por uno: verdadero si exactamente uno de los dos lo es. |
not | Invierte el valor de arriba de la pila booleana: verdadero pasa a falso y falso a verdadero. Sobre la pila vacía da falso. |
true | Apila un verdadero en la pila booleana. Dentro del cuerpo de un gen, vuelve a habilitar los stores que una condición había frenado. |
false | Apila un falso en la pila booleana. En la condición de un gen lo apaga; en el cuerpo frena los stores que siguen. |
dropbool | Saca y descarta el valor de arriba de la pila booleana. Dentro del cuerpo, termina el efecto de una condición en línea. |
clearbool | Vacía la pila booleana. Como vacía cuenta como verdadera, todos los stores que siguen vuelven a escribir. |
dupbool | Duplica 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. |
swapbool | Intercambia los dos valores de arriba de la pila booleana. Permite calcular dos condiciones y elegir cuál manda en cada tramo del cuerpo. |
overbool | Apila 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:
- Combinar:
and,oryxorreemplazan los dos valores de arriba por uno;notinvierte el de arriba. - Constantes:
trueyfalseapilan un valor fijo. - Acomodar la pila:
dropbool,clearbool,dupbool,swapboolyoverbool, las mismas herramientas que la pila entera tiene en los básicos.
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
stopUna 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.