- •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 Текст лекции
- •/* Программа эс*/
/* Программа 12 */
domains
spisok = name
name=symbol*
predicates
poisk_elem(name, spisok).
clauses
poisk_elem(Name, [Name | _ ]).
poisk_elem(Name,[ _ | Tail]) :- poisk_elem(Name, Tail).
Предикат poisk_elem имеет в качестве доменов терм name, определяющий объект поиска и терм spisok, в котором осуществляется поиск.
Первое предложение раздела clauses утверждает, что если объект поиска является головой списка, то на этом выполнение рекурсивного правила (описанного ниже) заканчивается.
Если же объект поиска не является головой списка, то рекурсивное правило определяет принадлежит ли он хвосту списка. Заголовок рекурсивного правила содержит в качестве аргументов объект поиска Name и список [ _ | Tail ], в котором голова отделена от хвоста списка. При этом голова списка обозначена анонимной переменной, поскольку предыдущее сопоставление показало, что голова текущего списка не совпадает с объектом поиска и поэтому на данный момент она нас не интересует.
Входящий в рекурсивное правило предикат poisk_elem(Name, Tail) определяет хвост текущего списка (Tail) как новый список и возвращает управление первому предложению раздела clauses, которое обеспечивает сравнение объекта поиска с головой нового списка, т.е. со следующим элементом исходного списка. Если сравнение не успешно, то процесс продолжается до выявления искомого элемента или полного исчерпания списка.
Например для запроса, представленного ниже, схема поиска будет выглядеть следующим образом:
Goal: poisk_elem(d, [a, b, d, e])
|
Голова списка |
Хвост списка |
Объект поиска |
|
a |
[b, d, e] |
d |
|
b |
[d, e] |
d |
|
d |
[e] |
d |
Поиск успешен и система отвечает: YES.
Соответственно, для другого запроса схема поиска будет такая:
Goal: poisk_elem(d, [a, b, c, e])
|
Голова списка |
Хвост списка |
Объект поиска |
|
a |
[b, c, e] |
d |
|
d |
[c, e] |
d |
|
c |
[e] |
d |
|
e |
[ ] |
d |
Поиск неуспешен и система отвечает: NO.
16 Лекция №15. Экспертные системы
Время: 2 часа (90 мин.)
16.1 Основные вопросы
- экспертная диагностика.
16.2 Текст лекции
Э
кспертные
системы – это программы, которые в
некоторой области знаний сопоставимы
по своему "интеллекту" с
человеком-экспертом. Обычно такая
область знаний чётко определена и строго
ограничена. Для этой области знаний
экспертная система способна выдавать
свои экспертные заключения на основе
запрашиваемой от него информации.
Ниже рассматривается программа экспертной системы, обеспечивающей определение вируса для ПЭВМ путём ответов "ДА" или "НЕТ" на задаваемые системой вопросы. Схема поиска вируса может быть представлена следующим образом:
Дадим краткие пояснения для используемых в программе предикатов:
clean_slate – очистка ДБД;
recognize – идентификация вируса;
characts – описание признаков вирусов;
check – обработка списка признаков вирусов.
ask_about – опрос пользователя относительно наличия или отсутствия признаков вируса.
Текст программы экспертной системы приводится ниже:
