Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1414-Лекции.doc
Скачиваний:
29
Добавлен:
25.12.2018
Размер:
419.84 Кб
Скачать

9 Лекция №8. Вопросно-ответные системы

Время: 2 часа (90 мин.)

9.1 Основные вопросы

- вычисление родственных отношений.

9.2 Текст лекции

Вопросно-ответные системы представляют собой программы- консультанты в той или иной предметной области. Ниже приводится программа, реализующая вопросно-ответную систему, ориентированную на вычисление различных родственных отношений. Эти отношения в явном виде не задаются на множестве объектов (имён), представленных на приводимой ниже схеме родственных отношений (см. рис.3). Они вычисляются на основе заданного явном виде отношения “родитель” (т.н. базового отношения) и/или других вычисляемых отношений.

Рис.3 Схема родственных отношений.

/* Программа 4 */

domains

person = symbol

predicates

roditel(person, person)

rebenok(person, person)

male(person)

female(person)

sestra(person, person)

brat(person,person)

ded(person,person)

baba(person,person)

tetya(person,person)

dadya(person,person)

mama(person,person)

papa(person,person)

clauses

roditel(ola,sasha).

roditel(vita,sasha).

roditel(vita,kata).

roditel(vita,kola).

roditel(sasha,ana).

roditel(sasha,vera).

male(sasha).

male(vita).

male(kola).

female(ola).

female(kata).

female(ana).

female(vera).

rebenok(Y, X) :- roditel(X, Y).

sestra(X, Y):-female(X),

roditel(Z, X),

roditel(Z, Y),

X<>Y.

brat(X, Y):-male(X),

roditel(Z, X),

roditel(Z, Y),

X<>Y.

ded(X, Y):-male(X),

roditel(X, Z),

roditel(Z, Y).

baba(X, Y):-female(X),

roditel(X, Z),

roditel(Z, Y).

tetya(X, Y):-female(X),

roditel(Z, Y),

sestra(X, Z).

dadya(X, Y):-male(X),

roditel(Z, Y),

brat(X, Z).

mama(X, Y):-female(X),

roditel(X, Y).

papa(X, Y):-male(X),

roditel(X, Y).

Определённые в программе предикаты: brat (“брат”), ded(“дедушка”), baba(“бабушка”), tetya(“тётя”), dadya(“дядя”), mama(“мама”), papa (“папа”) – используются для вычисления одноимённых родственных отношений.

10 Лекция №9. Средства отладки в Турбо-Прологе

Время: 2 часа (90 мин.)

10.1 Основные вопросы

- режим трассировки.

10.2 Текст лекции

Выполнение процедуры поиска решений Турбо-Прологом можно проследить в режиме трассировки. Для этого необходимо добавить оператор (опцию) trace в начало программы, а после запуска использовать клавишу F10 для пошагового выполнения программы. Каждый шаг при этом отслеживается в окне трассировки.

Рассмотрим, в качестве примера, программу, в которую включён оператор trace, и проследим за её пошаговым выполнением:

/*Программа 5 */

trace

domains

person=symbol

predicates

roditel(person, person)

clauses

roditel(ola, sasha).

roditel(vita, sasha).

roditel(sasha, ana).

roditel(sasha, vera).

roditel(vera, kola).

Решим с помощью этой программы следующую составную задачу:

Goal:roditel(vita, X), roditel(X,Y)

Пошаговое решение данной задачи с помощью клавиши F10 будет выглядеть следующим образом:

окно трассировки

TRACE

диалоговое окно

DIALOG

CALL:roditel("vita", _)

REDO:roditel("vita", _)

RETURN:roditel("vita", "sasha")

CALL:roditel("sasha", _)

REDO:roditel("sasha", _)

REDO:roditel("sasha", _)

REDO:roditel("sasha", _)

RETURN:*roditel("sasha", "ana")

X=sasha, Y=ana

REDO:roditel("sasha",_)

RETURN:roditel("sasha", "vera")

X=sasha, Y=vera

CALL:roditel("kata",_)

REDO:roditel("kata",_)

REDO:roditel("kata",_)

REDO:roditel("kata",_)

REDO:roditel("kata",_)

FAIL:roditel("kata",_)

2 Solutions

Для понимания приведённого протокола необходимо пояснение служебных слов:

CALL - начало просмотра предложений с данным предикатом в разделе clauses;

REDO - продолжение просмотра, если ранее не найдено унификации;

RETURN - унификация с указанием конкретного значения унифицированной переменной. При этом, если возможны альтернативные решения, перед предикатом указывается маркер возврата "*";

FAIL - унификация не состоялась.

В диалоговом окне появляются ответы в моменты унификации. Одновременно с выдачей операторов в окне TRACE, курсор указывает, в окне EDITOR, место в программе, которое обрабатывается в данный момент.

Если нет необходимости в трассировке всей программы, то возможна её активация лишь в определённых местах. Для этого в начале программы помещается опция trace, а затем в нужном месте трассировка может быть отключена с помощью директивы trace(off) или снова включена с помощью директивы trace(on).

Наряду с директивой trace также используется директива shorttrace, которая работает аналогично директиве trace, за исключением того, что в окно трассировки выводится меньше информации.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]