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

         

РЕКУРСИЯ


Рекурсией называется обращение процедуры к самой себе. Обычными средствами в Форте запрещается это делать. Например, при вводе : LOAD ( n -- ) DUP . LOAD ;

вы определяете новую версию слова LOAD, которое выдает номер загружаемого блока, после чего обращается к исходному варианту LOAD. Чтобы выражения такого типа были возможны, Форт-система во время компиляции определения умышленно «прячет» имя данного определения, и тем самым в новое определение компилируется адрес исходного варианта.

Тем не менее на Форте реализовать рекурсию довольно просто (нехитрые средства защиты Форта легко обмануть). Слово RECURSE осуществляет компиляцию адреса текущего определяемого слова. (В некоторых системах это слово известно как MYSELF.)1 Приведем пример рекурсии: VARIABLE СЧЕТЧИК : ПОЧЕМУ CR ." Почему вы спрашиваете? " -1 СЧЕТЧИК +! СЧЕТЧИК @ IF RECURSE THEN ; 5 СЧЕТЧИК !

Выполнив слово ПОЧЕМУ, вы получите: ПОЧЕМУ

Почему вы спрашиваете? Почему вы спрашиваете? Почему вы спрашиваете? Почему вы спрашиваете? Почему вы спрашиваете? ok

1 Для пользователей систем фиг-Форта. Определение следующее:

: RECURSE LATEST PFA CFA , ; IMMEDIATE

Для более ранних систем полифорта:

: RECURSE LAST @ @ 2+ , ; IMMEDIATE

Обратите внимание на то, что в рассматриваемом примере нет ни одного цикла. Начиная со значения 5 счетчика, слово ПОЧЕМУ будет обращаться к самому себе до тех пор, пока значение счетчика не станет равным нулю. (Не выполняйте слово ПОЧЕМУ при нулевом или слишком большом значении счетчика, поскольку ваш стек возвратов при этом переполнится.)



Содержание раздела