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



         

Глава 5. Ввод и вывод - часть 16


В случае, если число положительное, 0< возвращает 0, который словом NEGATE никак не изменяется. Определением слова S-D в Форт-83 будет : S-D ( n - d) DUP 0< ; поскольку в Форт-83 0< возвращает -1, если число отрицательное, или 0 в противном случае (см. гл. 7).

Приведем определение слова U. : : U. ( n -- ) S-D TYPE SPACE ;

Так как слово #> возвращает число символов в символьной строке, мы можем определить также слово UD.R: : UD.R ( d n - ) (Печать_беэ_энака_с_выравниванием_вправо) ROT ROT ( n d ) (Помещает значение длины поля на дно стека) ( n адр счет ) (Форматирует выводимое число) ROT OVER ( адр счет п счет ) - ( адр счет пробелы ) (Помещает перед числом пробелы) SPACES ( адр счет ) (Перемещает курсор на число пробелов) TYPE ( ) (Выводит число) ; (Конец определения)

А вот определение для U.R : ; U.R ( n n --) SWAP S-D ROT OVER - SPACES TYPE ;

Вы можете представить себе, как оно работает по аналогии с UD.R. Понимаете ли вы, почему лучше было бы определить некоторое слово, которое использовалось бы как для определения слова U.R, так и UD.R?

Как это ни удивительно, U.R, UD.R и UD. не включены в большинство версий Форта. Возможно, вы пожелаете добавить их к своему Форту.

Как быть с печатью чисел со знаком7 Для них нам потребуется слово SIGN (знак), которое вставляет знак - (минус) в символьную строку, если число, находящееся на вершине стека, отрицательное. Если вы напечатали 1245. TYPE на экране появится число -1245.

Более полезно определение слова D., которое позволяет выводить числа двойной длины со знаком. : D. ( d - ) SWAP ( мл# ст# -- ст# мл# ) OVER ( ст# мл# -- ст# мл# ст# ) DABS (Берет из стека абсолютное значение двойного числа, оставляя старшую часть исходного числа на дне стека, включая знак) (Заканчивает преобразование) TYPE SPACE (Выводит число) ; (Конец определения)

Почему слово SIGN применяется после #S, а не перед ним? Потому что строка символов при форматировании получается в результате просмотра справа налево. Это значит, что первым преобразуется наименее значащий (младший) разряд, поэтому после исполнения слова #S к строке символов будет добавлен символ знака перед наиболее значащим (старшим) разрядом, где ему и следует быть.


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