- •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 Текст лекции
- •/* Программа эс*/
5.2.3.3 Раздел доменов
Раздел domains предназначен для объявления доменов, описывающих типы областей значений используемых в программе объектов (термов). Например, если мы хотим определить предикат person(familia, pol, vozrast) характеризующий людей (person) с точки зрения фамилии (familia), пола (pol) и возраста (vozrast), и позволяющий описывать конкретные факты о людях в разделе clauses программы, то необходимо в разделе domains программы объявить соответствующие этим термам типы доменов:
domains
familia, pol = symbol
vozrast = integer
5.2.3.4 Раздел предикатов
Раздел predicates предназначен для объявления предикатов пользователя с указанием имени предиката и его доменов. Домены указываются в скобках и разделяются запятыми. Домены задаются либо явно, либо неявно. Декларация предиката не заканчивается точкой, в отличие от утверждений в разделе clauses.Предикат может состоять и из одного имени. Обычно такие предикаты используются для обозначения цели или заголовка правила. Например, предикат start часто используют в качестве имени программы, а предикат menu может служить заголовком правила, определяющего возможности меню программы.
5.2.3.5 Раздел утверждений
Раздел clauses служит для размещения фактов и правил, которые используются для оперирования этими фактами. Порядок расположения утверждений в разделе clauses не имеет значения, однако важным требованием Турбо-Пролога является расположение утверждений с одноименным предикатом последовательно друг за другом в одном месте программы (т.е. без “разрывов”).
Рассмотрим, например, следующий фрагмент программы:
domains
familia, pol = symbol
vozrast = integer
predicates
person(familia, pol, vozrast)
clauses
person("Петров","муж",35).
person("Волков","муж",21).
person("Полякова","жен",28).
В разделе clauses приведенного фрагмента программы имеется три утверждения-факта с предикатом person. В этих утверждениях на месте аргументов данного предиката, выступающих в роли доменов, появляются конкретные значения: ”Петров”,”Волков” и “Полякова”, принадлежащие домену familia (symbol); “муж”, ”жен”, принадлежащие домену pol (symbol); 35, 21, 28, принадлежащие домену vosrast (integer).
Типы доменов аргументов предиката допускается задавать и непосредственно в предикате, помещая соответствующие ключевые слова типов доменов на месте самих аргументов. В этом случае, например, тот же фрагмент программы будет выглядеть следующим образом:
predicates
person(symbol, symbol, integer)
clauses
person("Петров","муж",35).
person("Волков","муж",21).
person("Поляков","жен",28).
Программа стала короче (раздел domains исчез), раздел clauses не изменился, однако восприятие и понимание программы (особенно в случае большого количества различных предикатов) становится более сложным. Поэтому предпочтительным является описание типов доменов с использованием раздела domains.
Форматы объявления доменов предикатов следующие:
а. Для одного домена:
<имя домена>=<ключевое слово типа домена>
б. Для группы однотипных доменов:
<имя домена1>,…,<имя доменаN>=<ключевое слово типа домена>