Составители:
Рубрика:
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
Страницы
- « первая
- ‹ предыдущая
- …
- 87
- 88
- 89
- 90
- 91
- …
- следующая ›
- последняя »
