принято, что верхний элемент
В Форт- 79 принято, что верхний элемент стека имеет номер 1, а в Форт-83 -- номер 0. Таким образом, в стандарте Форт-83 выражение
0 PICK
приводит к такому же результату, что и DUP, в то же время для Форт-79 стандартное слово DUP эквивалентно
1 PICK
Если ввести 0 PICK, в стеке окажется какая-нибудь чушь. Таким образом, PICK, доставая число из глубины стека, не производит в нем других изменений.
Слово ROLL похоже на PICK, но в отличие от него вынимаемое число при перемещении его на вершину на старом месте удаляется. Например, в стандарте Форт-79
1 2 3 4 5 6 5 ROLL .S
приведет к
1 3 4 5 6 2 Ok
в то же время та же операция в стандарте Форт-83 приведет к другому результату:
2 3 4 5 6 1 ok
Нумерация элементов в стеке в стандартах Форт-79 и Форт-83 отличается для оператора ROLL так же, как и для PICK. Эти различия в стандартах важно учитывать при переносе программ из одной версии в другую. Слова ROLL и PICK следует применять, если невозможно использовать ничего другого, так как они работают значительно медленнее, чем DUP, OVER и ROT (эти три слова определены не с помощью слов PICK и ROLL, а непосредственно в машинных кодах). К тому же слово ROLL работает значительно медленнее, чем PICK. Чтобы избежать путаницы, нужно держать в стеке не более четырех чисел, которые используются в данном слове, и, если вы будете придерживаться этого правила, вам редко потребуются слова PICK и ROLL.
А сейчас будет уместно сделать небольшой экскурс в стандарты языка Форт. Как уже указывалось во введении, существуют два известных стандарта -- Форт-79 и Форт-83. Ссылки на основные документы, описывающие стандарты, приведены в приложении В. Различия между стандартами зачастую невелики, однако имеют значение, как, например, в случае ROLL и PICK, и мы обратим на это ваше внимание, когда будем встречаться с этими различиями. Версия, с которой вы работаете, должна соответствовать одному из стандартов, и вы можете определить, какому именно, если введете 79-STANDARD или FORTH-83. Если без ошибки будет принято первое слово, то ваша версия совместима с Форт-79, если же без ошибки будет принято последнее слово, ваша версия соответствует стандарту Форт-83.
Слово ?DUP представляет собой специальный вариант слова DUP. Оно делает копию числа, находящегося на вершине стека, если оно не равно нулю, и не копирует число, если оно равно нулю, Например,
1 4 5 ?DUP .S
дает в стеке
1 4 5 5 ok,
в то время как
1 4 0 ?DUP .S
приводит в результате к
1 4 0 ok
Таким образом, в последнем случае слово ?DUP не производит никаких действий. Оно особенно полезно вместе с конструкцией IF...THEN, примеры этого будут приведены в последующих главах.
Последнее слово в , DEPTH, не производит никаких перестановок в стеке. Вы уже встречали его в . Оно подсчитывает количество чисел в стеке и выдает его на вершину стека. Если ввести
21 131 56 7 89 DEPTH
мы получим
5 ok
где 5 -- это число элементов, находившихся в стеке перед исполнением слова DEPTH. Мы увидим еще применение слова DEPTH в последующих упражнениях.
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий