ОРГАНИЗАЦИЯ ЦИКЛА ПО МАССИВУ
Предлагаем вашему вниманию один из приемов работы с массивами. Лучше всего проиллюстрировать этот прием, написав на Форте наше собственное определение слова с именем DUMP. Оно применяется для вывода содержимого ряда адресов памяти. Форма использования этого слова следующая: адрес длина DUMP
Например, мы можем ввести СЧЕТЧИКИ 12 DUMP
и на печать будет выведено содержимое нашего массива СЧЕТЧИКИ, обеспечивающего нам подсчет яиц. Так как слово DUMP изначально было создано как средство программиста для вывода на печать содержимого участков памяти, то мы и получаем это содержимое либо байт за байтом, либо ячейку за ячейкой, в зависимости от вида адресации, применяемой в данном компьютере. В нашем варианте DUMP будет выводить ячейку за ячейкой. Очевидно, что в рассматриваемом здесь примере слово DUMP содержит цикл DO. Вопрос заключается в том, что должно использоваться в качестве индекса. Хотя мы можем задействовать как индекс цикла непосредственно сам счетчик (0—6), все же для скорости лучше взять за индекс АДРЕС. Адрес массива СЧЕТЧИКИ будет начальным индексом для нашего цикла, а адрес плюс счетчик — верхней границей, например: : DUMP ( а длина -- ) OVER + SWAP DO CR I @ 5 U.R 2 +LOOP ;
Ключевым выражением здесь является фраза OVER + SWAP
которая непосредственно предшествует DO.
Теперь начальный и конечный адреса находятся в стеке, готовые к использованию в качестве верхней границы и индекса цикла DO.
Выражение типа OVER + SWAP
называется клише, поскольку оно выполняет некоторое единое действие с точки зрения более высокого уровня. Данное конкретное клише преобразует адрес и счетчик в форму аргументов оператора DO. Так как индексирование осуществляется по адресам, для тою чтобы напечатать содержимое каждого элемента массива, поскольку мы находимся внутри цикла, достаточно просто ввести I @ 5 U.R
Проверка байтов выполняется попарно (из-за того, что @ выбирает 16-разрядное значение), поэтому мы всякий раз увеличиваем индекс на два с помощью выражения 2 +LOOP