Usa mi biblioteca G
https://github.com/luser-dr00g/G
Es un archivo de texto. Sin extensión, para la sintaxis más corta posible para cargarlo.
Permite este programa Sierpinksi Triangle de 203 caracteres
[48(0-1+0+1-0)49(11)43(+)45(-)/s{dup
0 eq{exch{[48{1 0 rlineto}49 1 index
43{240 rotate}45{120 rotate}>>exch
get exec}forall}{exch{load
exch 1 sub s}forall}ifelse 1 add}>>begin
9 9 moveto(0-1-1)9 s fill
para ser reescrito en 151 bytes como
3(G)run $
{A - B + A + B - A}
{B B}
{A - B - B}7{[ex{du w{(>K?\2u)$}if}fora]}rep
cvx[/A{3 0 rl}/B 1 in/-{120 rot}/+{-120 rot}>>b
100 200(k?B9)$ showp
archivo de trabajo con comentarios
El uso de la función abreviada de nombres de sistema 1(G)run
elimina por completo la carga de los nombres largos de operadores. El nombre de un operador solo debe ser lo suficientemente largo como para distinguirlo de los demás.
Entonces
add
se convierte ad
mul
se convierte mu
index
se convierte i
- etcétera etcétera.
Use el Apéndice F de PLRM para la tabla estándar de nombres de operadores.
Y la función de Operator Strings está disponible incluso si los nombres abreviados no están seleccionados. La biblioteca básica tiene un "nivel base" seleccionado al agregar simplemente (G)run
sin más decoraciones.
El nivel base incluye una nueva función .
que acepta el código entero para un operador (el mismo Apéndice F mencionado anteriormente) y lo ejecuta.
La nueva función $
itera a través de una cadena y llama .
a cada una. Entonces, el código ASCII selecciona directamente al operador por número.
Una nueva función le @
permite llegar al final de la tabla en el Apéndice F al tratar el carácter de espacio (Ascii 0x20) como 0.
Una nueva función le #
permite llegar más arriba en la tabla agregando primero 95 (0x5F) para que el espacio char 0x20 se trate como 127 (0x7F), el siguiente código después del último carácter ascii imprimible ~
126 (0x7E).
Dos nuevas funciones le !
permiten acceder a una estructura profundamente anidada de matrices y / o dictados con una matriz de índices / claves, en lugar de expresiones tediosas de muchos get
(y put
) operadores.
(G)run
7 caracteres compra el nivel base.
1(G)run
8 caracteres compra eso y abrevia los nombres del sistema.
3(G)run $
9 caracteres comienza inmediatamente un bloque de procedimiento implícito explorando líneas de origen hasta la siguiente línea en blanco, y definiendo la primera línea como un procedimiento llamado A
, la siguiente línea se define como un procedimiento llamado B
, etc. Esto debería eliminar la mayoría de los def
s necesarios para definir muchas cosas, sin necesidad de envolverlas en un diccionario, ni siquiera darles nombres explícitamente.