Составители:
Рубрика:
82
Name="Alice",
write(" ", Name),nl,
fail.
В базе данных имя Alice встречается трижды, поэтому результатом
работы приведенного правила будет список трех одинаковых имен.
Правило get_alice находит все (три) возможные означивания перемен-
ной Name, что является результатом применения метода ОПН. Однако при
желании можно выдать только первый экземпляр значения переменной
Name. Это достигается введением в правило выборки
отсечения:
get_first_alice :-
child(Name),
Name="Alice",
write(" ", Name), nl,
!,
fail.
В результате будет получен список, состоящий из единственного имени
Alice. Утверждение цели (правила) в предыдущем примере программы со-
держит элементы правила get_first_alice. Оно может быть использовано и как
внутренняя и как внешняя цель. Тщательно проанализировав это правило,
можно заметить, что предикат fail используется только один раз.
К моменту,
когда он получает управление, предикат cut уже устранил всякую возмож-
ность отката, в результате чего предикат fail оказывается бесполезным. От-
метим, что методы отката и отсечения здесь представлены в самой общей
форме, модифицировать которую для конкретного применения не составит
труда. Таким образом, диапазон применения отката и отсечения достато-
точно
широк.
* Упражнение
4.7. Модифицируйте программу, формирующую список новых
имен. Для этого:
a) добавьте предикат, который содержит как первое, так и второе имя
некоторых детей. Используйте следующий формат предиката:
child(First_name, last_name).
b) расширьте набор утверждений так, что бы включить первое
и второе имя для всех детей;
c) напишите правило для выдачи на печать имен
детей, второе
имя которых Smith (Смит);
d) напишите правило для выдачи на печать полного имени, если пер-
вое имя есть Alice;
e) выполните модифицированные программы.
4.4.3 Метод повтора (МП), определяемый пользователем
МП-метод, как и ОО-метод, использует откат. Но в МП-методе выпол-
нить откат возможно всегда в отличии от ОО-метода, где откат выполняются
Name="Alice",
write(" ", Name),nl,
fail.
В базе данных имя Alice встречается трижды, поэтому результатом
работы приведенного правила будет список трех одинаковых имен.
Правило get_alice находит все (три) возможные означивания перемен-
ной Name, что является результатом применения метода ОПН. Однако при
желании можно выдать только первый экземпляр значения переменной
Name. Это достигается введением в правило выборки отсечения:
get_first_alice :-
child(Name),
Name="Alice",
write(" ", Name), nl,
!,
fail.
В результате будет получен список, состоящий из единственного имени
Alice. Утверждение цели (правила) в предыдущем примере программы со-
держит элементы правила get_first_alice. Оно может быть использовано и как
внутренняя и как внешняя цель. Тщательно проанализировав это правило,
можно заметить, что предикат fail используется только один раз. К моменту,
когда он получает управление, предикат cut уже устранил всякую возмож-
ность отката, в результате чего предикат fail оказывается бесполезным. От-
метим, что методы отката и отсечения здесь представлены в самой общей
форме, модифицировать которую для конкретного применения не составит
труда. Таким образом, диапазон применения отката и отсечения достато-
точно широк.
* Упражнение
4.7. Модифицируйте программу, формирующую список новых
имен. Для этого:
a) добавьте предикат, который содержит как первое, так и второе имя
некоторых детей. Используйте следующий формат предиката:
child(First_name, last_name).
b) расширьте набор утверждений так, что бы включить первое
и второе имя для всех детей;
c) напишите правило для выдачи на печать имен детей, второе
имя которых Smith (Смит);
d) напишите правило для выдачи на печать полного имени, если пер-
вое имя есть Alice;
e) выполните модифицированные программы.
4.4.3 Метод повтора (МП), определяемый пользователем
МП-метод, как и ОО-метод, использует откат. Но в МП-методе выпол-
нить откат возможно всегда в отличии от ОО-метода, где откат выполняются
82
Страницы
- « первая
- ‹ предыдущая
- …
- 80
- 81
- 82
- 83
- 84
- …
- следующая ›
- последняя »
