- •2.2.2.1 Вызов Турбо-Пролога и главное меню системы
- •2.2.3 Редактор Турбо-Пролога
- •2.2.3.1 Создание и редактирование программного файла
- •3 Лекция №2. Элементы и конструкции языка Турбо-Пролог
- •3.1 Основные вопросы
- •3.2 Текст лекции
- •3.2.1.1 Имена (идентификаторы)
- •3.2.2.1 Предикаты
- •3.2.2.2 Факты
- •3.2.2.3 Правила
- •3.2.2.4 Цели
- •4 Лекция №3. Объекты данных. Константы, переменные, структуры, списки.
- •4.1 Основные вопросы
- •4.2 Текст лекции
- •Стандартные типы доменов Турбо-Пролога
- •4.2.2.1 Константы
- •4.2.2.2 Переменные
- •4.2.2.3 Структуры
- •4.2.2.3 Списки
- •5 Лекция №4. Структура программы на Турбо-Прологе
- •5.1 Основные вопросы
- •5.2 Текст лекции
- •5.2.2 Структура программы на Турбо-Прологе – до 10 мин.
- •5.2.3.1 Раздел опций компилятора
- •5.2.3.2 Раздел констант
- •5.2.3.3 Раздел доменов
- •5.2.3.4 Раздел предикатов
- •5.2.3.5 Раздел утверждений
- •5.2.3.6 Раздел дбд
- •5.2.3.7 Раздел целей
- •6 Лекция №5. Унификация и поиск с возвратом: программа с фактами
- •6.1 Основные вопросы
- •6.2 Текст лекции
- •7 Лекция №6. Унификация и поиск с возвратом: программа с фактами и правилом
- •7.1 Ключевые (основные) вопросы (моменты)
- •7.2 Текст лекции
- •8 Лекция №7. Унификация и поиск с возвратом: программа с фактами и несколькими правилами
- •8.1 Основные вопросы
- •8.2 Текст лекции
- •9 Лекция №8. Вопросно-ответные системы
- •9.1 Основные вопросы
- •9.2 Текст лекции
- •10 Лекция №9. Средства отладки в Турбо-Прологе
- •10.1 Основные вопросы
- •10.2 Текст лекции
- •/*Программа 5 */
- •11 Лекция №10. Простейший ввод-вывод. Окна.
- •11.1 Основные вопросы
- •11.2 Текст лекции
- •11.2.1 Простейший ввод-вывод
- •11.2.2 Окна
- •12 Лекция №11. Управление поиском решений: предикаты отсечения и возврата
- •12.1 Основные вопросы
- •12.2 Текст лекции
- •/* Программа 5 */
- •Vse_reshenia:-roditel(X,y), write(X, "родитель", y), nl, fail.
- •Vita - родитель sasha
- •/* Программа 6 */
- •/* Программа 7 */
- •13 Лекция №12. Арифметика в Турбо-Прологе. Рекурсия.
- •13.1 Основные вопросы
- •13.2 Текст лекции
- •/* Программа 8 */
- •/* Программа 9 */
- •14 Лекция №13. Динамические базы данных
- •14.1 Основные вопросы
- •14.2 Текст лекции
- •/* Программа работы с дбд*/
- •15 Лекция №14. Работа со списками
- •15.1 Основные вопросы
- •15.2 Текст лекции
- •/* Программа 10*/
- •/* Программа 11 */
- •/* Программа 12 */
- •16 Лекция №15. Экспертные системы
- •16.1 Основные вопросы
- •16.2 Текст лекции
- •/* Программа эс*/
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, за исключением того, что в окно трассировки выводится меньше информации.