22 Jun 2020
Un lenguaje de programación nica
Ni opera con un arreglo de números enteros, en referencia a la cinta de la máquina de Turing al igual que brainfuck, contiene un total de 65,536 celdas que se inicializan en cero. Cada celda contiene un número entero de 64 bits.
Ni tiene un cabezal que apunta a la memoria de una celda del array que puedes manipular con instrucciones.
Ni también maneja un clipboard, como una variable global a la que se puede acceder y modificar en cualquier momento.
Instrucciones
Instrucción | Descripción |
---|---|
> | Mueve el cabezal a la derecha |
< | Mueve el cabezal a la izquierda |
+ | Suma 1 al número de la celda apuntada |
- | Resta 1 al número de la celda apuntada |
@ | Lee un byte, lo convierte a número y lo almacena en la celda apuntada |
. | Imprime en pantalla el número almacenado en la celda apuntada |
! | Imprime en pantalla el equivalente ASCII del número almacenado en la celda apuntada |
# | Establece un valor hexadecimal de dos dígitos en la celda apuntada |
? | Copia el número de la celda apuntada |
= | Almacena el número copiado en la celda apuntada |
* | Convierte a 0 el número de la celda apuntada |
$ | Mueve el cabezal hacia el indice del número hexadecimal de 4 digitos que se escriba a continuación |
[] | (While) Bucle que continua ejecución si la celda apuntada no es igual a 0 |
{} | (For) Bucle que ejecuta las instrucciones el número de veces que indica la memoria de la celda apuntada |
() | (if) Ejecuta el conjunto de instrucciones si el número apuntado no es igual a 0 |
/ | Ignora el resto de la línea |
Ejemplo:
Un ejemplo básico es crear un código que escriba los números enteros en orden, para hacer eso tendríamos que crear una variable con valor 0, imprimirlo, luego sumarle 1 en un bucle infinito.
En Ni sería lo siguiente:
+[>.+<]
Explicación
Al sumar a la celda inicial 1, nos aseguramos que el bucle [] sea infinito ya que tendrá el valor 1 y no 0, dentro del bucle tenemos >.+<, que es moverse a la derecha (siguiente celda) imprimir el número (inicialmente 0) luego sumar 1 a esa celda y regresar a la celda inicial que vale 1.
Sin embargo, al ejecutar esto, nos va a imprimir infinitamente los números y tendremos que cancelar la operación para detenerlo (Ctrl+C) y sin separación o salto de línea, lo que hace que sea ilegible, vamos a mejorarlo un poco.