Форт берет из стека два
55 111 + * .
тогда вы увидите
332 ok
Форт берет из стека два верхних числа 55 и 111, складывает их, кладет сумму назад в стек, поэтому в нем находятся
2 166
Оператор * затем умножает число 2 на 166, что дает 332, и кладет в стек результат, который после этого печатается. Наша аналогия с картами показана на . Использование обратной польской нотации в выражении
2 55 111 + *
эквивалентно
2 * (55 + 111)
в обычной алгебраической нотации. Если вы набрали на клавиатуре
55 111 2 + *
то это эквивалентно вводу
55 * (111 + 2)
что, конечно же, отличается от предыдущего примера.
рис. 1.2
Поначалу ОПН и стек немного смущают, но после небольшой практики вы будете считать ее по меньшей мере такой же естественной, как и обычная алгебраическая нотация. В следующей главе у вас будет очень много практики, но вам уже сейчас хочется сделать что-нибудь самостоятельно. Давайте пока отложим в сторону детали, связанные со стеком и обратной польской записью, перестанем использовать Форт как калькулятор и попробуем написать программу. Наберите следующий текст:
: TIMES2 * . ;
и вы увидите только "ok", т.е. будто бы ничего не произошло. Но теперь, если вы напечатаете
5 TIMES2
то увидите
10 ok
Вы только что определили (описали) слово TIMES2 (умножить_на_2) на языке Форт, которое представляет собой крошечную программу: ее действие состоит в том, чтобы поместить в стек число 2, умножить его на то значение, которое было в стеке раньше, и затем напечатать результат. : (двоеточие) дало Форту указание начать определение и принять слово TIMES2 (каждая следующая порция ввода заканчивается пробелом) в качестве имени нового слова Форта. Три символа (2, * и.) -- ранее существовавшие слова Форта, которые рассказывают программе, что она должна делать, затем ; (точка с запятой) указывает на то, что определение закончено. (Обратите внимание, что в качестве слова в Форте может выступать один символ, как, например, в английском языке слова "I" (я) и "а" (артикль).)
Содержание Назад Вперед