Способ мышления-Форт


         

Представим себе, что мы разрабатываем


Представим себе, что мы разрабатываем редактор для текстового процессора. Нам нужна программа, которая вычисляет количество символов между текущим положением курсора и предыдущей последовательностью возврат-каретки/перевод-строки. Так мы пишем слово, в котором при помощи цикла DO LOOP, начиная от текущей позиции (КУРСОР @) и заканчивая нулевой позицией, производится поиск символа перевода строки. Когда в цикле обнаруживается искомая символьная последовательность, мы вычитаем ее относительный адрес из нашего текущего положения курсора
ее-позиция КУРСОР @ SWAP -
для получения расстояния между ними. Стековая картинка слова будет:
( -- расстояние-до-предыдущего-вк/пс )
Но при последующем кодировании мы обнаруживаем, что аналогичное слово нужно для вычисления расстояния от произвольного символа - `не` от текущей позиции курсора. Мы останавливаемся на том, что вычленяем "КУРСОР @" и передаем начальный адрес через стек в качестве аргумента, получая:
( начальное-положение -- расстояние-до-предыдущего-вк/пс )
Выделив ссылку на переменную мы сделали определение более полезным.
------------------------------------------------------------ СОВЕТ За исключением случаев, когда манипуляции со стеком достигают уровня нечитабельности, пытайтесь передавать аргументы через стек вместо того, чтобы брать их из переменных. ------------------------------------------------------------
----------------------------------------------------------------
Кожж:
Большая часть модульности Форта происходит от проектирования и понимания слов Форта как "функций" в - 216 -
математическом смысле. Мой опыт показывает, что Форт-программист обычно старается избегать определения любых, кроме наиболее существенных глобальных переменных (у меня есть друг, у которого над столом висит надпись "Помоги убрать переменные"), и пытается писать слова со свойством так называемой "ссылочной переносимости", т.е. при одних и тех же данных на стеке слово всегда дает одинаковый ответ независимо от более общего контекста, в котором оно исполняется.

Содержание  Назад  Вперед