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

UptoLike

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

89
новку. Третья компонента - список других предикатов. Аналогично, успех
или неудача этих предикатов на рекурсию не оказывает влияния. Четвертая
группа - само рекурсивное правило. Успех этого правила вызывает рекурсию.
Пятая группа - список предикатов, успех или неудача которых не влияет на
рекурсию. Пятая группа также получает значения (если они имеются), по-
мещенные в стек
во время выполнения рекурсии.
Вспомним, что правило рекурсии должно содержать условие выхода.
В противном случае рекурсия бесконечна и правило бесполезно. Ответствен-
ность за обеспечение завершаемости правила рекурсии лежит на программи-
сте. Правила, построенные указанным образом, являются обобщенными
правилами рекурсии (ОПР), а метод называется ОПР-методом.
Например, вы хотите написать
правило генерации всех целых чисел
начиная с 1 и кончая 7. Пусть имя правила будет
write_number(Number).
Для этого примера первая компонента структуры общего правила ре-
курсии не используется. Второй компонентой, т.е. предикатом выхода, явля-
ется Number < 8. Когда значение Number равно 8, правило будет успешным
и программа завершится.
Третья компонента правила оперирует с
числами. В этой части прави-
ла число выдается на экран и затем увеличивается на 1. Для увеличенного
числа будет использоваться новая переменная Next_Number. Четвертая ком-
понента - вызов самого правила рекурсии write_number(Next_number). Пя-
тая компонента, представленная в общем случае, здесь не используется.
Листинг 4.8
__________________________________________________________
/* Программа: Генерация ряда */
/* Назначение: Демонстрация использования рекурсии
для */
/* генерации ряда чисел в порядке */
/* возрастания */
domains
number = integer
predicates
write_number(number)
goal
write("Here are the numbers:"),
nl,nl,
write_number(1),
nl,nl,
write(" All done, bye!").
clauses
write_number(8).
write_number(Number) :-
новку. Третья компонента - список других предикатов. Аналогично, успех
или неудача этих предикатов на рекурсию не оказывает влияния. Четвертая
группа - само рекурсивное правило. Успех этого правила вызывает рекурсию.
Пятая группа - список предикатов, успех или неудача которых не влияет на
рекурсию. Пятая группа также получает значения (если они имеются), по-
мещенные в стек во время выполнения рекурсии.
      Вспомним, что правило рекурсии должно содержать условие выхода.
В противном случае рекурсия бесконечна и правило бесполезно. Ответствен-
ность за обеспечение завершаемости правила рекурсии лежит на программи-
сте. Правила, построенные указанным образом, являются обобщенными
правилами рекурсии (ОПР), а метод называется ОПР-методом.
      Например, вы хотите написать правило генерации всех целых чисел
начиная с 1 и кончая 7. Пусть имя правила будет
      write_number(Number).
      Для этого примера первая компонента структуры общего правила ре-
курсии не используется. Второй компонентой, т.е. предикатом выхода, явля-
ется Number < 8. Когда значение Number равно 8, правило будет успешным
и программа завершится.
      Третья компонента правила оперирует с числами. В этой части прави-
ла число выдается на экран и затем увеличивается на 1. Для увеличенного
числа будет использоваться новая переменная Next_Number. Четвертая ком-
понента - вызов самого правила рекурсии write_number(Next_number). Пя-
тая компонента, представленная в общем случае, здесь не используется.

                          Листинг 4.8
__________________________________________________________
  /* Программа: Генерация ряда                           */
  /* Назначение: Демонстрация использования рекурсии для */
  /*        генерации ряда чисел в порядке               */
  /*              возрастания                            */
domains
     number = integer

predicates
      write_number(number)

goal
      write("Here are the numbers:"),
                                  nl,nl,
                                  write_number(1),
                                  nl,nl,
                                  write("     All done, bye!").
clauses
      write_number(8).
      write_number(Number) :-


                                                                       89