Язык программирования Форт



             

Полезная программа - часть 2


Мы будем традиционно считать, что ширина экрана равна 64 позициям, таким образом, пределы длины столбика от 1 до 64. Прежде всего нам нужно узнать, как напечатать один символ "X". Самый простой способ -- это использовать слово ." . Вначале определим слово, которое должно печатать "X" один раз, т.е.

: .Х ." X" ;

(В данном случае точкой в названии .X мы отмечаем, что это слово должно что-то напечатать, это общепринятое соглашение на языке Форт). Теперь определим следующее слово:

: TEST 40 О DO .X LOOP ;

и, когда вы введете TEST , вы увидите на экране :

ХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХ Ok

т.е. 40 букв "X", после которых выведено подтверждение. Слова DO и LOOP, предписывают Форту повторить исполнение слов, находящихся между ними, причем число повторений определяется двумя числами, находящимися в стеке, когда встречается слово DO, в данном случае 40 раз. Зацикливание программы, или многократное исполнение набора инструкций, очень важная возможность языка Форт, как и других компьютерных языков.

Но слово TEST -- это еще не то, что нам нужно: оно печатает столбик из 40 литер "X", а нам необходимо печатать столбики различной длины, в зависимости от числа, находящегося на вершине стека. Чтобы сделать это, нужно просто вынести из определения число, задающее верхний предел цикла DO-LOOP, т.е. мы можем определить слово

: BAR 0 DO .X LOOP CR ;

Так как для слова DO необходимо иметь в стеке два числа, то для исполнения слова BAR (столбик) вам нужно задавать одно из них -- предел цикла. Если вы введете 23 BAR, то на экране увидите

ххххххххххххххххххххххх ok

Обратите внимание, что слово "ok" печатается на следующей строке. Это результат действия слова CR, которое производит перевод строки и возврат каретки. Без слова CR все наши столбики будут выстроены в ряд друг за другом, а не один под другим.

Теперь нам нужно напечатать несколько столбиков различной длины. Другими словами, мы хотим повторить программу BAR несколько раз.


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