DarwinBotsManual
Abrir la app EnglishEN

dup

Duplica el número de arriba de la pila entera, para usarlo dos veces sin volver a leerlo ni calcularlo.

Datos

Palabra
dup
Alias
dupint
Familia
Básicos
Pila entera
saca 1, pone 2
Qué hace
Copia el tope: a queda a a. Con la pila vacía apila dos ceros.
Costo
Comando básico
Se ejecuta en
dentro de un gen: en la condición (cond) y en el cuerpo (start o else)

a dup deja a a. Sirve cuando un valor hace falta dos veces: en lugar de leer otra vez la celda o repetir la cuenta, se copia. También se puede escribir dupint.

PalabraPila después
*.eye540 (por ejemplo)
dup40 40
mult1600

Este bot guarda en la celda 50 lo que ve el ojo central (.eye5) elevado al cuadrado, y en las celdas 51 y 52 lo que ve más 10, calculado una sola vez:

cond
start
  *.eye5 dup mult 50 store
  *.eye5 10 add dup 51 store 52 store
stop

El otro uso famoso está en el Bestiario: x dup div vale 1 si x no es cero y 0 si lo es, porque div por cero da 0. Con eso se arman condiciones con pura aritmética (ver Los operadores por familia).

Una rareza heredada: con la pila vacía, dup no deja la pila vacía sino que apila dos ceros. En cambio dupbool, su par de la pila booleana, no hace nada con la pila vacía.