Используйте мою библиотеку G
https://github.com/luser-dr00g/G
Это текстовый файл. Без расширения, для кратчайшего синтаксиса, чтобы загрузить его.
Это позволяет эту программу Sierpinksi Triangle с 20 символами
[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
переписать в 151 байт как
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
рабочий файл с комментариями
Использование функции сокращенных системных имен 1(G)run
полностью снимает бремя длинных имен операторов. Имя оператора должно быть достаточно длинным, чтобы отличить его от других.
Так
add
становится ad
mul
становится mu
index
становится i
- и т. д.
Используйте Приложение F PLRM для стандартной таблицы имен операторов.
И функция Строки Оператора доступна, даже если сокращенные имена не выбраны. Голая библиотека имеет «базовый уровень», выбранный простым добавлением (G)run
без дополнительных украшений.
Базовый уровень включает новую функцию, .
которая принимает целочисленный код для оператора (то же самое Приложение F, упомянутое выше) и выполняет его.
Новая функция $
перебирает строку и вызывает .
каждую. Таким образом, код ascii напрямую выбирает оператора по номеру.
Новая функция @
позволяет вам добраться до нижней части таблицы в Приложении F, обрабатывая символ пробела (Ascii 0x20) как 0.
Новая функция #
позволяет вам подняться дальше в таблицу, сначала добавив 95 (0x5F), чтобы символ пробела 0x20 обрабатывался как 127 (0x7F), самый следующий код после последнего печатаемого символа ascii ~
126 (0x7E).
Две новые функции !
позволяют получить доступ к глубоко вложенной структуре массивов и / или диктов с помощью массива индексов / ключей, а не утомительных выражений многих get
(и put
) операторов.
(G)run
7 символов покупает базовый уровень.
1(G)run
8 символов покупает это И сокращенные системные имена.
3(G)run $
9 символов сразу начинают блок неявной процедуры сканируя исходные строки до следующей пустой строки, и определяя первую строку как вызываемую процедуру A
, следующая строка определяется как вызываемая процедура B
и т. Д. Это должно удалить большинство из def
s, необходимых для определения много вещей, без необходимости оборачивать их в словарь, и даже не давать им явно имена.