Цитата:
2. Можно писать любой язык, так почему выбран такой непонятный? Взяли обычный математический и вперед. Можно даже двумерный, как в Mathematica, TeX или Microsoft Equation...
расширенные операторами стековые манипуляторы это
особая форма записи форт-кода.постараюсь показать на примерах:
а) простое арифметическое выражение с печатью результата,
Код:
: t1 1 2 3 4 * + - . ;
: t2 _1234*+-._ ;
чем отличается t2 от t1? нет пробелов и нижнее подчеркивание в начале и конце блока символов,
визуально очень похоже, порядок констант и операций один и тот же.
б) тоже арифметическое выражение, но с VALUE
Код:
: t3 1 TO a 2 TO b 3 TO c 4 TO d a b c d * + - . ;
: t4 1 2 3 4 4:abcd, abcd*+-. ;
немного короче загрузка, а выражение один в один
в) цикл DO...LOOP, определим два слова для демонстрации трансформации
: D POSTPONE DO ; IMMEDIATE
: L POSTPONE LOOP ; IMMEDIATE
печатаем индекс цикла
Код:
: t5 9 0 DO I . LOOP ;
: t6 9 0 D I . L ;
: t7 _90DI.L_ ;
все три цикла образуют один визуальный ряд, а цикл в манипуляторе выглядит вполне по фортовски
г) оператор условного выбора, тоже определим слова для демонстрации
: i POSTPONE IF ; IMMEDIATE
: e POSTPONE ELSE ; IMMEDIATE
: t POSTPONE THEN ; IMMEDIATE
тогда получим такой ряд:
Код:
: t8 0= IF 22 ELSE 33 THEN + . ;
: t9 0= i 22 e 33 t + . ;
: t10 0= _i"22e"33t+._ ;
д..) Большинство символов обозначающих операторы имеют заметную и/или очевидную
визуальную связь со словами форта, или смысловую ассоциацию:
Код:
BEGIN <--> B; WHILE <--> W; REPEAT <--> R; UNTIL <--> U; но EXECUTE <--> X; MOVE <--> V;
ABS <--> a; DUP <--> d; C@ <--> b (byte); MAX <--> M (M большое); MIN <--> m (M маленькое);
DROP <--> x (символ сброса); 0= <--> Z (Zero); но 0<> <--> z (NO zERO); EXIT <--> ;
>NUMBER <--> #; SFIND <--> $ (похоже на S); AND <--> &; OR <--> |; но TRUE <--> Y (Yes);
некоторые слова форта совпадают с символами операторов: ! @ * + - . / < = >
еще немного примеров можно глянуть здесь
https://github.com/kgforth/sm/blob/master/info.txtпримеры приведены на крайней версии, которая имеет отличие от реализации chess-a:
а) введен контекст в виде чередуемости блоков параметров и блоков команд
(осознаю очень спорное предложение, мне кажется улучшает читабельность но
требует некоторого внимания и понимания)
б) поменялось значение префикса ` теперь именуется префикс альтернативы для поддержки
работы блоков и векторов.
в) поменялось значение префикса ' теперь префикс дополнительных однобуквенных
команд (визуальное соответствие одинарная кавычка = следом один символ команды)
г) поменялось значение префикса " теперь префикс двубуквенных команд
(визуальное соответствие двойная кавычка = следом два символа команды)
д) новый префикс ~ для трехбуквенных команд
е) поменялось значение некоторых символов, например ^ (теперь префикс адреса)
? теперь i (для оператора IF ) и некоторые другие.
Хотя в целом старался сохранить максимальную совместимость с оригинальной версией,
реализация а) потянула всю эту цепочку...