logo search
Моделирование систем / Моделирование систем / Теория / Dop / АИС_Конспект

3.4.3 Использование рекурсии

В VIP допускается использование рекурсивных правил. Рекурсия – вызов в теле правила самого. Рекурсивные вызовы используются для организации циклического выполнения определенных действий в программах. В программах написанных на VIP существует понятие оптимизированной хвостовой рекурсии. Если рекурсия не оптимизирована, то при вызове правила резервируется дополнительная стековая оперативная память ЭВМ, в результате возникает ошибка – отсутствие свободной оперативной памяти.

Причины возникновения не оптимизированной рекурсии:

Рекурсивный вызов не последний в теле правила;

Наличие условия перед рекурсивным вызовом;

Если в теле правила вызывается предикат, содержащий условия.

Рекурсивные вызов может понадобится для зацикливания работы программы. Такая необходимость может возникнуть при программировании опроса меню программы.

Пример. Составить программу для опроса клавиатуры. Программа реагирует на нажатие клавиш «1», «2» и «3». При нажатии клавиши «ESC» (код 27) программа завершает свою работу.

predicates

action(char)

repeat

clauses

repeat. %рекурсивное правило

repeat:-

repeat.%рекурсия оптимизирована

action('1'):-

write("\nКлавиша 1"),readchar(_).

action('2'):-

write("\nКлавиша 2"),readchar(_).

action('3'):-

write("\nКлавиша 3"),readchar(_).

action('\27'):-

write("\nКонец работы\n").

goal %меню, зацикливание

repeat,

write("\n1-Певый пежим”),write(“\n2-Второй режим”),

write(“\n3-Третий режим\nВведите цифру”),

readchar(Num),action(Num),Num='\27',!.

Для прекращения работы программы использовано отсечение в целевом утверждении программы.