DarwinBotsManual
Abrir la app EnglishEN

Básicos

La aritmética del ADN (suma, resta, producto, división, resto, signo, azar) y las herramientas para acomodar la pila entera.

Costo: Comando básico

OperadorQué hace
addSuma los dos números de arriba de la pila entera y deja el resultado.
subResta el número de arriba de la pila al que está debajo: a b sub deja a − b.
multMultiplica los dos números de arriba de la pila entera; si el producto pasa de 2000 millones, se queda en ese tope.
divDivide el número de abajo por el de arriba y redondea al entero más cercano (al par en el empate); dividir por cero da 0.
rndCambia el número de arriba de la pila por uno al azar entre 0 y ese número, ambos incluidos.
*Lee la memoria en una dirección calculada: saca una dirección de la pila y apila lo que hay en esa celda.
modDeja el resto de dividir el número de abajo por el de arriba, con el signo del dividendo; con divisor 0 da 0.
sgnCambia el número de arriba de la pila por su signo: −1 si es negativo, 0 si es cero y 1 si es positivo.
absCambia el número de arriba de la pila por su valor absoluto: le saca el signo.
dupDuplica el número de arriba de la pila entera, para usarlo dos veces sin volver a leerlo ni calcularlo.
dropSaca el número de arriba de la pila entera y lo descarta.
clearVacía la pila entera de un saque; la pila booleana no la toca.
swapIntercambia los dos números de arriba de la pila entera: a b swap deja b a.
overCopia arriba de todo el segundo número de la pila entera: a b over deja a b a.

Los básicos son de dos clases, y todos trabajan solo con la pila entera: sacan de ahí sus operandos y dejan ahí el resultado.

Las que más vas a escribir son add, sub, mult y div, casi siempre para ajustar una lectura antes de guardarla (*.nrg 10 div), y rnd para darle al bot algo de azar. Las de pila sirven cuando un valor hace falta dos veces: dup evita leer dos veces la misma celda.

Como en todo el ADN, el orden es operandos primero: a b sub es a − b, y el que está más abajo en la pila es el primer operando. Ninguno falla: con la pila vacía trabajan con ceros. Y en la pila entera caben números mucho más grandes que en la memoria, así que un resultado intermedio de 90000 no es problema mientras lo achiques antes de guardarlo (ver Números y direcciones).

Una idea de uso que combina varios: un contador que va de 0 a 9 y vuelve a empezar, guardado en la celda 50, y un gen que aprovecha la vuelta para hacer algo cada 10 ciclos.

cond
start
  *50 1 add 10 mod 50 store
stop

cond
  *50 0 =
start
  1256 rnd .setaim store
stop

Cada operador básico ejecutado cuesta Comando básico (gratis con las reglas F1). El panorama de todas las familias está en Los operadores por familia.