Utiliser ma bibliothèque G
https://github.com/luser-dr00g/G
C'est un fichier texte. Aucune extension, pour la syntaxe la plus courte possible pour le charger.
Il permet ce programme Sierpinksi Triangle de 203 caractères
[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
à réécrire en 151 octets
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
fichier de travail avec commentaires
En utilisant la fonction de noms de système abrégés, 1(G)run
élimine complètement le fardeau des noms d'opérateurs longs. Un nom d'opérateur n'a besoin que d'être assez long pour le distinguer des autres.
Donc
add
devient ad
mul
devient mu
index
devient i
- etc.
Utilisez le PLRM annexe F pour le tableau standard des noms d'opérateurs.
Et la fonction des chaînes d'opérateur est disponible même si les noms abrégés ne sont pas sélectionnés. La bibliothèque nue a un "niveau de base" sélectionné en ajoutant simplement(G)run
sans autres décorations.
Le niveau de base comprend une nouvelle fonction .
qui accepte le code entier pour un opérateur (le même appendice F mentionné ci-dessus) et l'exécute.
La nouvelle fonction $
parcourt une chaîne et fait appel .
à chacun. Le code ascii sélectionne donc directement l'opérateur par numéro.
Une nouvelle fonction @
vous permet d'atteindre le bas du tableau de l'annexe F en traitant le caractère espace (Ascii 0x20) comme 0.
Une nouvelle fonction #
vous permet d'accéder plus loin dans le tableau en ajoutant d'abord 95 (0x5F) pour que le caractère d'espace 0x20 soit traité comme 127 (0x7F), le code suivant après le dernier caractère ascii imprimable~
126 (0x7E).
Deux nouvelles fonctions !
vous permettent d'accéder à une structure profondément imbriquée de tableaux et / ou de dict avec un tableau d'index d'indices / clés, plutôt que des expressions fastidieuses de nombreux opérateurs get
(et put
).
(G)run
7 caractères achète le niveau de base.
1(G)run
8 caractères achètent les noms de système ET abrégés.
3(G)run $
9 caractères commencent immédiatement un bloc de procédure implicite en balayant les lignes des sources jusqu'à la ligne vierge suivante, et en définissant la première ligne comme une procédure appelée A
, la ligne suivante est définie comme une procédure appelée B
, etc. Cela devrait supprimer la plupart des def
s nécessaires pour définir beaucoup de choses, sans avoir besoin de les envelopper dans un dictionnaire, ni même de leur donner explicitement des noms.