Начальный курс программирования на языке Форт


ОПРЕДЕЛЯЮЩИЕ СЛОВА ВЫ МОЖЕТЕ СПЕЦИФИЦИРОВАТЬ САМИ - часть 5


Мы представляем себе, что наш массив выглядит следующим образом:

а на самом деле в памяти машины он хранится в виде

Если вам требуется адрес байта, расположенного в строке 2 столбца 1, то вы можете умножить номер столбца (1) на число строк в каждом столбце (4), а затем прибавить номер строки (2). В результате получается, что вам нужен шестой байт машинного представления массива. Примерно такие вычисления делают в период выполнения элементы, составляющие слово МАТРИЦА. Но для того чтобы их производить, как вы можете заметить, любое составляющее слово должно «знать» число строк в каждом столбце конкретного массива. Для этих целей слово МАТРИЦА во время компиляции вносит число строк в столбце в начало массива. Для любознательных приведем стековые эффекты фрагмента периода выполнения слова МАТРИЦА:ОПЕРАЦИЯ СОДЕРЖИМОЕ СТЕКА строка столбец pfa PUP @ строка столбец рfa #строк ROT строка pfa #строк столбец * строка pfа индекс-столбца + + адрес 2+ скорректированный-адрес

К вычисленному адресу необходимо добавить двойку, потому что первая ячейка нашего массива содержит число строк.

Предлагаем вашему вниманию еще один пример, который, может быть, не очень полезен, но весьма нагляден:\ Шаблоны с использованием определяющих слов : STAR 42 EMIT ; : .РЯД ( b -- ) \ вывод звездочки на каждый бит из байта CR 8 0 DO DUP 128 AND IF STAR ELSE SPACE THEN 2* LOOP DROP ; : ФОРМА ( b1 b2 b3 b4 b5 b6 b7 b8 -- ) \ определение формы из 8-строк CREATE 8 0 DO С, LOOP DOES> DUP 7 + DO I С@ .РЯД -1 +LOOP CR ; \ формы: HEX 18 18 3С 5А 99 24 24 24 ФОРМА ЧЕЛОВЕК 81 42 24 18 18 24 42 81 ФОРМА КОНЬ АА АА FE FE 38 38 38 FE ФОРМА ЗАМОК DECIMAL

Слово .РЯД выводит строку, состоящую из звездочек и пробелов, где звездочка соответствует единице, а пробел - нулю в восьмиразрядном двоичном представлении числа, находящегося в вершине стека, например:2 BASE ! ok

00111001 .РЯД *** * ok DECIMAL ok

Наше определяющее слово ФОРМА берет из стека восемь аргументов и определяет шаблон, который при своем выполнении выводит решетку 8х8 элементов, соответствующую этим восьми аргументам:ЧЕЛОВЕК ** ** **** * ** * * ** * * * * * * * ok

Итак, определяющие слова могут быть чрезвычайно полезным инструментом. Создавая новое определяющее слово, вы тем самым расширяете свой компилятор. Традиционные языки не обеспечивают такой гибкости, потому что они представляют собой жесткие готовые программы, которые предлагают вам в обязательном порядке конкретный набор операторов. Реальная помощь определяющих слов заключается в том, что их применение позволяет упростить вашу программу. При правильном их употреблении вы можете сократить время программирования, уменьшить размер программы и повысить ее читабельность. В следующем разделе мы приведем еще один способ расширения средств компилятора Форта.




Начало  Назад  Вперед



Книжный магазин