TURBO PROLOG. Терёхин В.В. - 87 стр.

UptoLike

Составители: 

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