Составители:
Рубрика:
80
Предположим, что необходимо выдать список имен до имени Diana
включительно. Предикат cut выполнит отсечение в указанном месте. Преди-
кат fail используется для продолжения откатов и доступа к последовательно-
сти имен базы данных до элемента с именем Diana. Таким образом, по-
ставленную задачу выполняет соответствующая комбинация предикатов cut
и fail. Эта комбинация
называется методом отката и отсечения (ОО). Про-
грамма, формирующая список имен детей демонстрирует этот метод.
В программе об именах предикатом базы данных является
child(person). Для этого предиката имеется 9 альтернативных утверждений.
Правило, обеспечивающие генерацию всех имен (а не только некоторых)
имеет вид:
show_them_all :-
child(Name),
write(" ", Name), nl,
fail.
Оно основано на методе ОПН. При
этом для того, что бы использовать
предикат cut, необходимо определить некоторое условие, которое может
быть и простым, как в нашем примере, и очень сложным. В данном слу-
чае достаточным является условие Name=Diana. Правило, определяющее,
это условие имеет вид:
make_cut(Name) :-
Name="Diana".
Это правило с последующим предикатом cut (!) образует правило
make_cut (сделать
отсечение). Теперь выполнение программы будет неус-
пешным, а откаты будут повторяться до тех пор, пока Name не окажется
равным Diana. В этот момент результат выполнения правила make_cut будет
успешным, что в свою очередь, вызовет выполнение предиката cut. Таким
образом, комбинируя правила отсечения с методом ОПН, можно получить
ОО-правило:
show_some_of_them :-
child(Name),
write(" ", Name), nl,
make_cut(Name),!.
make_cut(Name) :-
Name="Diana".
Программа, формирующая список имен детей включает ОО-правило.
Вы можете изменить выдачу программы, изменив имя объекта в условии от-
сечения. Например, Name=Beth, выдает список имен до имени Beth включи-
тельно. Этот способ использования ОО-метода называется методом ранжи-
рованного отсечения.
* Упражнение
4.6. Измените правило make_cut в программе,
формирующей список
имен детей так, чтобы выдать список имен до имени Peter включительно.
Предположим, что необходимо выдать список имен до имени Diana
включительно. Предикат cut выполнит отсечение в указанном месте. Преди-
кат fail используется для продолжения откатов и доступа к последовательно-
сти имен базы данных до элемента с именем Diana. Таким образом, по-
ставленную задачу выполняет соответствующая комбинация предикатов cut
и fail. Эта комбинация называется методом отката и отсечения (ОО). Про-
грамма, формирующая список имен детей демонстрирует этот метод.
В программе об именах предикатом базы данных является
child(person). Для этого предиката имеется 9 альтернативных утверждений.
Правило, обеспечивающие генерацию всех имен (а не только некоторых)
имеет вид:
show_them_all :-
child(Name),
write(" ", Name), nl,
fail.
Оно основано на методе ОПН. При этом для того, что бы использовать
предикат cut, необходимо определить некоторое условие, которое может
быть и простым, как в нашем примере, и очень сложным. В данном слу-
чае достаточным является условие Name=Diana. Правило, определяющее,
это условие имеет вид:
make_cut(Name) :-
Name="Diana".
Это правило с последующим предикатом cut (!) образует правило
make_cut (сделать отсечение). Теперь выполнение программы будет неус-
пешным, а откаты будут повторяться до тех пор, пока Name не окажется
равным Diana. В этот момент результат выполнения правила make_cut будет
успешным, что в свою очередь, вызовет выполнение предиката cut. Таким
образом, комбинируя правила отсечения с методом ОПН, можно получить
ОО-правило:
show_some_of_them :-
child(Name),
write(" ", Name), nl,
make_cut(Name),!.
make_cut(Name) :-
Name="Diana".
Программа, формирующая список имен детей включает ОО-правило.
Вы можете изменить выдачу программы, изменив имя объекта в условии от-
сечения. Например, Name=Beth, выдает список имен до имени Beth включи-
тельно. Этот способ использования ОО-метода называется методом ранжи-
рованного отсечения.
* Упражнение
4.6. Измените правило make_cut в программе, формирующей список
имен детей так, чтобы выдать список имен до имени Peter включительно.
80
Страницы
- « первая
- ‹ предыдущая
- …
- 78
- 79
- 80
- 81
- 82
- …
- следующая ›
- последняя »
