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
| Operador | Qué hace |
|---|---|
add | Suma los dos números de arriba de la pila entera y deja el resultado. |
sub | Resta el número de arriba de la pila al que está debajo: a b sub deja a − b. |
mult | Multiplica los dos números de arriba de la pila entera; si el producto pasa de 2000 millones, se queda en ese tope. |
div | Divide 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. |
rnd | Cambia 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. |
mod | Deja el resto de dividir el número de abajo por el de arriba, con el signo del dividendo; con divisor 0 da 0. |
sgn | Cambia el número de arriba de la pila por su signo: −1 si es negativo, 0 si es cero y 1 si es positivo. |
abs | Cambia el número de arriba de la pila por su valor absoluto: le saca el signo. |
dup | Duplica el número de arriba de la pila entera, para usarlo dos veces sin volver a leerlo ni calcularlo. |
drop | Saca el número de arriba de la pila entera y lo descarta. |
clear | Vacía la pila entera de un saque; la pila booleana no la toca. |
swap | Intercambia los dos números de arriba de la pila entera: a b swap deja b a. |
over | Copia 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.
- Cuentas:
add,sub,mult,div,mod,sgn,absyrnd, más*, que lee la memoria en una dirección calculada. - Manejo de la pila:
dup,drop,swap,overyclear. No calculan nada, solo reacomodan lo que hay.
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
stopCada 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.