ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ. 1. База данных содержит следующие факты:
1. База данных содержит следующие факты:
увлекается(“Коля”, гитара).
увлекается(“Оля”, скрипка).
увлекается(“Дима”, плаванье).
увлекается(“Таня”, теннис).
спорт(плаванье).
спорт(теннис).
муз_инстр(скрипка).
муз_инстр(гитара).
а) составить правило спортсмен и определить, кто увлекается спортом;
б) проследить за поиском решения с помощью отладчика;
в) построить целевое дерево поиска с возвратом.
2. База данных содержит следующие факты:
увлекается(“Дима”, плаванье).
увлекается(“Таня”, теннис).
увлекается(“Коля”, гитара).
увлекается(“Оля”, скрипка).
спорт(плаванье).
спорт(теннис).
муз_инстр(скрипка).
муз_инстр(гитара).
а) составить правило музыкант и определить, кто увлекается музыкой;
б) проследить за поиском решения с помощью отладчика;
в) построить целевое дерево поиска с возвратом.
Отчет о выполненной самостоятельной работе должен содержать:
1) тему лабораторной работы;
2) условие задачи;
3) листинг программы;
4) результаты ее тестирования;
5) целевое дерево поиска решения.
1.5 Управление поиском с возвратом: предикаты fail и отсечения.
fail – это тождественно-ложный предикат, искусственно создающий ситуацию неуспеха. После выполнения этого предиката управление передается в точку отката и поиск продолжается. Использование предиката fail позволяет найти все решения задачи.
Чтобы ограничить пространство поиска и прервать поиск решений при выполнении какого-либо условия, используется предикат отсечения (обозначается !), Однажды пройдя через отсечение, невозможно вернуться назад, т.к. этот предикат является тождественно-истинным. Процесс может только перейти к следующей подцели, если такая имеется.
Например, p :- p1, p2, !, p3.
Если достигнуты цели p1 и p2, то возврат к ним для поиска новых решений невозможен.
Пример 1
База данных содержит факты вида: student(имя, курс). Создать проект, позволяющий сформировать список студентов 1-го курса.
Решение:
PREDICATES
student(symbol,integer)
spisok
CLAUSES
student(vova,3).
student(lena,1).
student(dima,1).
student(ira,2).
student(marina,1).
spisok:-student(X,1),write(X),nl,fail.
GOAL
write("Список студентов 1-курса"),nl,spisok.
Результат выполнения программы:
Список студентов 1-курса
lena
dima
marina
Пример 2
База данных содержит факты вида father(name, name). Создать проект, позволяющий определить кто чей отец.
Решение:
DOMAINS
name=symbol
PREDICATES
father (name, name)
everybody
CLAUSES
father ("Павел", "Петр").
father ("Петр", "Михаил").
father ("Петр", "Иван").
everybody:- father (X, Y),
write(X," - это отец",Y,"а"),nl,
fail.
GOAL
everybody.
Результат выполнения программы:
Павел - это отец Петра
Петр - это отец Михаила
Петр - это отец Ивана
Пример 3
Создать проект, реализующий железнодорожный справочник. В справочнике содержится следующая информация о каждом поезде: номер поезда, пункт назначения и время отправления.
а) вывести всю информацию из справочника.
Решение:
DOMAINS
nom=integer
p, t=string
PREDICATES
poezd(nom,p,t)
CLAUSES
poezd(233,moskva,"12-30").
poezd(257,moskva,"22-40").
poezd(133,armavir,"10-20").
poezd(353,armavir,"20-40").
poezd(353,adler,"02-30").
poezd(413,adler,"11-10").
poezd(256,piter,"21-30").
GOAL
write(" Расписание поездов"), nl,
write("Номер Пункт прибытия Время отправления"),
nl, poezd(N,P,T), write(N," ",P," ",T),nl,fail.