Составители:
Рубрика:
83
только после искусственного созданного неуспешного результата. Правило
рекурсии общего вида имеет более сложную структуру и является обобщени-
ем этих методов.
Вид правила повтора, определяемого пользователем, следующий:
repeat. /* повторить */
repeat :- repeat.
Первый repeat является утверждением, объявляющим предикат repeat
истинным. Первый repeat не создает подцелей, поэтому данное правило
всегда успешно. Однако, поскольку имеется
еще один вариант для этого
правила, то указатель отката устанавливается на первый repeat. Второй repeat
- это правило, которое использует само себя как компоненту (третий re-
peat).Второй repeat вызывает третий repeat, и этот вызов вычисляется успеш-
но, так как первый repeat удовлетворяет подцели repeat. Следовательно,
правило repeat так же всегда
успешно. Предикат repeat будет вычисляться
успешно при каждой новой попытке его вызвать после отката. Факт в прави-
ле будет использоваться для выполнения всех подцелей программы. Таким
образом, repeat это рекурсивное правило, которое никогда не бывает неудач-
ным.
Правило repeat широко используется в качестве компоненты других
правил. Примером этого может служить
программа Эхо (листинг 4.6), кото-
рая считывает строку, введенную с клавиатуры, и дублирует ее на экран. Ес-
ли пользователь введет stop, то программа завершается.
Листинг 4.6
_______________________________________________________________
/* Программа: Эхо */
/* Назначение: Демонстрация использования МП-метода, */
/* определенного пользователем */
predicates
write_message
repeat
do_echo
check(name)
goal
write_message,
do_echo.
clauses
repeat.
repeat :- repeat.
write_message :-
nl, write("Введите, пожалуйста, имена"), nl,
только после искусственного созданного неуспешного результата. Правило
рекурсии общего вида имеет более сложную структуру и является обобщени-
ем этих методов.
Вид правила повтора, определяемого пользователем, следующий:
repeat. /* повторить */
repeat :- repeat.
Первый repeat является утверждением, объявляющим предикат repeat
истинным. Первый repeat не создает подцелей, поэтому данное правило
всегда успешно. Однако, поскольку имеется еще один вариант для этого
правила, то указатель отката устанавливается на первый repeat. Второй repeat
- это правило, которое использует само себя как компоненту (третий re-
peat).Второй repeat вызывает третий repeat, и этот вызов вычисляется успеш-
но, так как первый repeat удовлетворяет подцели repeat. Следовательно,
правило repeat так же всегда успешно. Предикат repeat будет вычисляться
успешно при каждой новой попытке его вызвать после отката. Факт в прави-
ле будет использоваться для выполнения всех подцелей программы. Таким
образом, repeat это рекурсивное правило, которое никогда не бывает неудач-
ным.
Правило repeat широко используется в качестве компоненты других
правил. Примером этого может служить программа Эхо (листинг 4.6), кото-
рая считывает строку, введенную с клавиатуры, и дублирует ее на экран. Ес-
ли пользователь введет stop, то программа завершается.
Листинг 4.6
_______________________________________________________________
/* Программа: Эхо */
/* Назначение: Демонстрация использования МП-метода, */
/* определенного пользователем */
predicates
write_message
repeat
do_echo
check(name)
goal
write_message,
do_echo.
clauses
repeat.
repeat :- repeat.
write_message :-
nl, write("Введите, пожалуйста, имена"), nl,
83
Страницы
- « первая
- ‹ предыдущая
- …
- 81
- 82
- 83
- 84
- 85
- …
- следующая ›
- последняя »
