Użyj mojej biblioteki G.
https://github.com/luser-dr00g/G
To plik tekstowy. Bez rozszerzenia, aby załadować możliwie najkrótszą składnię.
Umożliwia ten 203-znakowy program Trójkąta Sierpinksi
[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
do przepisania w 151 bajtach jako
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
plik roboczy z komentarzami
Korzystanie ze skróconej nazwy systemu 1(G)run
całkowicie eliminuje ciężar długich nazw operatorów. Nazwa operatora musi być wystarczająco długa, aby odróżnić ją od innych.
Więc
add
staje się ad
mul
staje się mu
index
staje się i
- itd itd.
Użyj dodatku F dla PLRM, aby uzyskać standardową tabelę nazw operatorów.
A funkcja Ciągów operatora jest dostępna, nawet jeśli nie wybrano skrótów. W nagiej bibliotece wybrano „poziom podstawowy”, dodając po prostu(G)run
bez dalszych dekoracji.
Poziom podstawowy zawiera nową funkcję, .
która akceptuje kod liczby całkowitej dla operatora (ten sam dodatek F wspomniany powyżej) i wykonuje go.
Nowa funkcja $
dokonuje iteracji po łańcuchu i wywołuje .
każdą z nich. Zatem kod ascii bezpośrednio wybiera operatora według numeru.
Nowa funkcja @
pozwala dotrzeć do dołu tabeli w załączniku F, traktując znak spacji (Ascii 0x20) jako 0.
Nowa funkcja #
pozwala dotrzeć do dalszej tabeli, najpierw dodając 95 (0x5F), więc znak spacji 0x20 jest traktowany jako 127 (0x7F), następny kod po ostatnim drukowanym znaku ascii ~
126 (0x7E).
Dwie nowe funkcje !
umożliwiają dostęp do głęboko zagnieżdżonej struktury tablic i / lub nagrań za pomocą tablicy indeksów indeksów / kluczy, zamiast żmudnych wyrażeń wielu get
(i put
) operatorów.
(G)run
7 znaków kupuje poziom podstawowy.
1(G)run
8 znaków kupuje ORAZ skrócone nazwy systemów.
3(G)run $
9 znaków natychmiast rozpoczyna linie źródła skanowania bloku procedury niejawnej aż do następnej pustej linii, a zdefiniowanie pierwszego wiersza jako wywołanej procedury A
, następny wiersz jest zdefiniowany jako wywołana procedura B
itp. Powinno to usunąć większość elementów def
potrzebnych do zdefiniowania wiele rzeczy, bez konieczności zawijania ich w słowniku, ani nawet jawnego nadawania im nazw.