Victor__v писал(а):
Иногда делаю слова-карманы внутри слов.
Принцип FORTH прост: слово - это единица размышления/действия. Не нужно стремиться изобретать какие-то универсальные парадигмы. Просто записывайте задачу так, как ее видите. Например, я уже показывал коллеге, как решается задача про прямоугольник. Тупо рисуем линии (немного изменил решение для большей читаемости):
: 2DELTA 2OVER D- ;
: 4DUP 2OVER 2OVER ;
: -TOP DROP ;
: -LEFT NIP ;
: -BOTTOM SWAP >R + R> ;
: -RIGHT >R 0 D+ R> ;
: SAVE- COMPILE 4DUP ' , COMPILE R@ ; IMMEDIATE
: BOX ( X1,Y1,X2,Y2,COLOR--) >R 2DELTA
SAVE- -TOP HLINE SAVE- -LEFT VLINE
SAVE- -BOTTOM HLINE -RIGHT R> VLINE ;
Много лишних слов? Но они позволяют понять код даже через несколько лет. Причем, заметьте, присутствие очевидных -LEFT и -TOP позволяет обойтись без стековых комментариев в аналогичных -BOTTOM и -RIGHT. (А вспомнить, что Вы положили 3 года назад в "карман", Вам поможет только изощренный комментарий).
Экономить на определениях не стоит - FORTH слишком тормозной и требует слишком много памяти. Зато он позволяет писать быстро и коротко. И, как следствие, хорошо написанные программы выполняются быстро и требуют мало памяти. Выигрыш не во внутреннем супер-механизме, а в тупой экономии мозгов.
P.S. Здесь я проиллюстрировал важный принцип - в FORTH слова, упаковывающие в себе функциональность неких констант (в т.ч. адресных, т.е., переменных), гораздо удобнее "просто констант".
P.P.S. Но, все равно, главный недостаток данной программы остался неустраненным - 4 практически одинаковых кусочка кода - "параметры xLINE". Это завсегда источник ошибок (я даже сначала перепутал имена -TOP и -LEFT, причем смысл-то остался верным). Очевидно, слова, рисующие "от последней позиции" здесь были бы удобнее.