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.
| Palabra | Pila después |
|---|---|
*.eye5 | 40 (por ejemplo) |
dup | 40 40 |
mult | 1600 |
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
stopEl 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.