cond
Abre un gen nuevo: vacía la pila booleana y empieza la zona de condiciones, que termina en start o else.
Datos
- Palabra
cond- Familia
- Flujo
- Qué hace
- Cierra el gen anterior y abre uno nuevo con su zona de condiciones. Vacía la pila booleana. Ahí corre todo, pero los stores no escriben.
- Costo
- Control de flujo; end no cuesta
- Se ejecuta en
- siempre
cond abre un gen. Desde ahí hasta el start (o el else) va la zona de condiciones: comparaciones como > o = que van dejando verdaderos y falsos en la pila booleana. Al llegar el start, el cuerpo corre solo si todas son verdaderas.
' se reproduce si tiene más de 5000 de energía y no ve nada adelante
cond
*.nrg 5000 >
*.eye5 0 =
start
50 .repro store
stopLas dos condiciones, sobre .nrg y .eye5, se unen con y sin escribir nada más; para un o hace falta or. Con 6000 de energía el bot se divide con .repro en el segundo ciclo, no en el primero: los sentidos se publican al final de cada ciclo y en el primero todavía valen 0 (ver Ejecución y costos).
Lo que conviene saber de cond:
- Vacía la pila booleana al empezar. Es el único marcador que la vacía siempre (
start,elseystopsolo lo hacen cuando cierran una zona de condiciones), así que empezar un gen concondlo protege de condiciones que hayan quedado de antes (ver La pila entera y la booleana). - En la zona de condiciones se ejecuta todo menos los stores: podés calcular, pero un
storeahí no escribe y no saca nada de la pila. - Un
condsin condiciones, seguido destart, corre siempre. - Un
conden medio de un cuerpo cierra ese gen y abre otro, aunque falte elstop. - Cada
condcuenta como un gen nuevo en.genesy.thisgene.
La estructura completa del gen está en Genes: cond, start, else y stop.