Составители:
Рубрика:
87
Однако в случае возникновения бесконечной рекурсии число элемен-
тов данных, используемых рекурсивным процессом, непрерывно растет и в
некоторый момент стек переполнится. На экране появится сообщение об
ошибке. Возникновение переполнения во время выполнения программы для
пользователя нежелательно, так как в результате могут оказаться утерянны-
ми существенные данные. Избегать подобные ситуации можно
увеличением
размеров стека, для чего служит опция Miscellaneous settings (прочие уста-
новки параметров) в меню Setup (установка).
Если рекурсивное правило не генерирует указателей отката и послед-
няя подцель правила является рекурсивным вызовом самого правила, то
Турбо-Пролог устранит дополнительные расходы, вызываемые рекурсией.
Этот процесс называется устранением хвостовой рекурсии.
Избежать возникновения бесконечной
рекурсии можно. Для этого
следует ввести предикат завершения, содержащий условие выхода. Форму-
лировка условия выхода на русском языке для правила write_string может
иметь вид: "Продолжать печать строки до тех пор, пока счетчик печати не
превысит число 7. После чего остановить процесс". Определение условий
выхода и включение их в правило рекурсии является
очень важным элемен-
том программирования на Турбо-Прологе.
Программа "Вернись" (листинг 4.7) демонстрирует простое правило
рекурсии, в которое включено условие выхода.
Листинг 4.7
________________________________________________________
/* Программа: Вернись */
/* Назначение: Демонстрация построения рекурсивных */
/* правил для вводы и вывода символов */
domains
Char_data = char
predicates
write_prompt
read_a_character
goal
write_prompt,
read_a_character.
clauses
write_prompt :-
write("Пожалуйста, введите символы."), nl, nl,
write("Для завершения введите # "), nl, nl.
read_a_character :-
readchar(Char_data),
Char_data <> '#',
Однако в случае возникновения бесконечной рекурсии число элемен-
тов данных, используемых рекурсивным процессом, непрерывно растет и в
некоторый момент стек переполнится. На экране появится сообщение об
ошибке. Возникновение переполнения во время выполнения программы для
пользователя нежелательно, так как в результате могут оказаться утерянны-
ми существенные данные. Избегать подобные ситуации можно увеличением
размеров стека, для чего служит опция Miscellaneous settings (прочие уста-
новки параметров) в меню Setup (установка).
Если рекурсивное правило не генерирует указателей отката и послед-
няя подцель правила является рекурсивным вызовом самого правила, то
Турбо-Пролог устранит дополнительные расходы, вызываемые рекурсией.
Этот процесс называется устранением хвостовой рекурсии.
Избежать возникновения бесконечной рекурсии можно. Для этого
следует ввести предикат завершения, содержащий условие выхода. Форму-
лировка условия выхода на русском языке для правила write_string может
иметь вид: "Продолжать печать строки до тех пор, пока счетчик печати не
превысит число 7. После чего остановить процесс". Определение условий
выхода и включение их в правило рекурсии является очень важным элемен-
том программирования на Турбо-Прологе.
Программа "Вернись" (листинг 4.7) демонстрирует простое правило
рекурсии, в которое включено условие выхода.
Листинг 4.7
________________________________________________________
/* Программа: Вернись */
/* Назначение: Демонстрация построения рекурсивных */
/* правил для вводы и вывода символов */
domains
Char_data = char
predicates
write_prompt
read_a_character
goal
write_prompt,
read_a_character.
clauses
write_prompt :-
write("Пожалуйста, введите символы."), nl, nl,
write("Для завершения введите # "), nl, nl.
read_a_character :-
readchar(Char_data),
Char_data <> '#',
87
Страницы
- « первая
- ‹ предыдущая
- …
- 85
- 86
- 87
- 88
- 89
- …
- следующая ›
- последняя »
