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


ПРЕОБРАЗОВАНИЕ ВВОДИМЫХ ЧИСЕЛ - часть 3


BEGIN CONVERT Преобразование до первого символа, не являющегося цифрой DUP C@ DUP ASCII : = SWAP ASCII . ASCII / 1+ Это запятая, дефис, точка или слэш? WITHIN OR WHILE 0 DPL ! REPEATE Если да, то переустановить DPL и продолжать -ROT R> IF DNEGATE THEN Перемещение d в вершину. Если значение в стеке возвратов указывает минус, то число делается отрицательным. ROT С@ BL = ; Является ли последний, непреобраэованный, символ пробелом, как это и должно быть?

: NUMBER ( адр -- d) NUMBER? NOT ABORT" ?" ; Если преобразование завершилось неудачей, то аварийный выход посредством ABORT.

В приведенном определении учитывается, что CONVERT вычитает из DPL по единице при обработке каждой цифры до тех пор, пока значение переменной не станет равным -1. Кроме того, в определении используется слово WITHIN, аналогичное слову ВНУТРИ (см. упражнение к гл. 4).

В качестве «истины» принято арифметическое значение -1, как это определено Стандартом-83. Для более ранних систем, где значением истины является единица, в строке 4 нужно заменить «-» на «+».

В Форте число, вводимое без знаков пунктуации, заносится в стек как число одинарной длины. При рассмотренном здесь определении слова NUMBER текстовый интерпретатор должен обращаться к нему примерно так: ... NUMBER DPL @ -1 = IF DROP THEN ...




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



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