- •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 Текст лекции
- •/* Программа эс*/
4.2.2.2 Переменные
Переменные в Турбо-Прологе служат для обозначения объектов, на которые нельзя ссылаться по имени. Они, в отличие от процедурных языков программирования, определяют не некоторую область зарезервированной памяти, а имя самого неизвестного, и получают свои значения во время выполнения программы при сопоставлении их с константами. Синтаксически переменная ставится на место неизвестного терма в выражениях (фактах, правилах, целях) и должна начинаться с большой буквы, или с символа подчеркивания. Например:
roditel (X, vera). или roditel (_X, vera).
Так определяется цель на поиск всех родителей (X либо _X) Веры (vera).
Переменная, состоящая только из символа подчеркивания, называется анонимной. Анонимная переменная (в отличие от именованной) используется в том случае, если принимаемое ей значение не существенно для данного выражения, т.е. может быть любым.
Область действия именованной переменной ограничивается только тем выражением, в котором она используется. Поэтому в разных выражениях одно и то же имя переменной можно использовать совершенно различным образом. В этом смысле анонимная переменная отличается от именованной. Каждая анонимная переменная есть отдельная сущность, которая никогда не примет какого-либо конкретного значения, и поэтому несколько анонимных переменных в рамках одного и того же выражения отличаются друг от друга (т.е. являются различными сущностями).
4.2.2.3 Структуры
Структуры – это составные термы, которые, в отличие от простых состоят из совокупности термов (как простых, так и составных), объединяемых в единое целое. Структуре присваивается некоторое объединительное имя, отражающее сущность совокупности объединенных термов. Синтаксически описание структуры в Турбо-Прологе имеет вид:
f (t1, t2,…,tn).
Здесь f – имя структуры; t1, t2,…,tn – термы, являющиеся его аргументами.
Количество термов в структуре определяет ее арность. Структуры арности ноль являются простыми термами.
Примером описания тернарной структуры может служить следующая конструкция:
data (12, "Mart", 1999).
Здесь data - имя структуры, объединяющей три простых терма. Из этой структуры, например, можно составить более сложную структуру, включив в нее еще один унарный составной терм sotr("Петров"). Присвоив этой новой структуре объединительное имя data_sotr получим:
data_sotr (data (12, "Mart", 1999), sotr("Петров")).
Замечание: Структура – это сложный объект, который можно использовать и обрабатывать аналогично простым термам.
4.2.2.3 Списки
Списки - это составные термы, представляющие собой упорядоченные наборы объектов одного и того же доменного типа, которые называются элементами списка.
Элементами списка могут быть простые термы и структуры, включая сами списки.
Различают списки фиксированной и произвольной длины (длина списка - это количество элементов списка).
Синтаксически элементы списков фиксированной длины отделяются друг от друга запятой и заключаются в квадратные скобки, например:
[4, 5, -3, 1] - список целых чисел (длина списка = 4);
[sob, rot, pet] - список символических имен;
[telefon (lena, 2683243), telefon (ana, 1692627)] - список бинарных структур;
[[a, b, c], [f, g]] - список списков символических имен;
[ ] - пустой список (длина списка =0).
Синтаксически списки произвольной длины задаются либо явно, либо неявно (т.е. с помощью переменных) и называются головой списка. Остальные элементы называются хвостом списка. Хвост списка отделяется от головы специальным знаком “|” и задается только в неявном виде. Хвост списка всегда должен быть только списком и может включать пустой список. Голова списка - всегда элемент или совокупность элементов (но не список).
Голова, хвост и разделяющий их знак (функтор списка) заключаются в квадратные скобки, например:
[ 1, 2, | X ]
[ d | [ ] ]
[ X|Y ]
[ X, [ Y|Z ] ]
Тип элементов списка обязательно должен декларироваться в разделе domains программы, а сами списки задаются в разделе clauses.
Замечание: Списки – это сложные объекты, которые можно использовать и обрабатывать аналогично простым термам.