Usa la mia libreria G.
https://github.com/luser-dr00g/G
È un file di testo. Nessuna estensione, per caricare la sintassi più breve possibile.
Permette questo programma Triangolo Sierpinksi da 203 caratteri
[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
da riscrivere in 151 byte come
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
file di lavoro con commenti
L'uso della funzione abbreviata per i nomi dei sistemi 1(G)runrimuove completamente l'onere dei nomi di operatori lunghi. Il nome di un operatore deve essere abbastanza lungo da distinguerlo dagli altri.
Così
add diventa ad
mul diventa mu
index diventa i
- ecc. ecc.
Utilizzare l' appendice F PLRM per la tabella standard dei nomi degli operatori.
E la funzione di Operator Strings è disponibile anche se i nomi abbreviati non sono selezionati. La libreria vuota ha un "livello base" selezionato aggiungendo semplicemente(G)run senza ulteriori decorazioni.
Il livello base include una nuova funzione .che accetta il codice intero per un operatore (la stessa Appendice F menzionata sopra) e lo esegue.
La nuova funzione $scorre attraverso una stringa e chiama .ciascuna. Quindi il codice ascii seleziona direttamente l'operatore per numero.
Una nuova funzione @consente di raggiungere la parte inferiore della tabella nell'Appendice F trattando il carattere dello spazio (Ascii 0x20) come 0.
Una nuova funzione #ti consente di accedere più in alto alla tabella aggiungendo prima 95 (0x5F) in modo che il carattere spaziale 0x20 sia trattato come 127 (0x7F), il codice immediatamente successivo all'ultimo carattere ASCII stampabile~ 126 (0x7E).
Due nuove funzioni !consentono di accedere a una struttura profondamente annidata di matrici e / o dicts con una matrice di indici di indici / chiavi, anziché espressioni noiose di molti get(e put) operatori.
(G)run 7 caratteri acquista il livello base.
1(G)run 8 caratteri acquistano E nomi di sistema abbreviati.
3(G)run $9 caratteri iniziano immediatamente un blocco di procedura implicita scansionando le righe di origine fino alla riga vuota successiva e definendo la prima riga come una procedura chiamata A, la riga successiva viene definita come una procedura chiamata B, ecc. Ciò dovrebbe rimuovere la maggior parte delle defs necessarie per la definizione un sacco di cose, senza la necessità di avvolgerle in un dizionario, né di dare loro nomi espliciti.