ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ. 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.