Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы программирования на языке Turbo Prolog.doc
Скачиваний:
23
Добавлен:
09.11.2019
Размер:
563.2 Кб
Скачать

Министерство общего и профессионального образования Российской Федерации

Магнитогорский государственный технический

университет им. Г.И. Носова

Кафедра вычислительной техники и прикладной математики

Основы программирования на языке Turbo Prolog

Составители: Кирпичева Н.Т.

Торчинский В.Е.

Файнштейн С.И.

Магнитогорск 2000

Глава 1. Введение в пролог

1. Декларативные и процедурные языки программирования

Процедурные (ИМПЕРАТИВНЫЕ) языки программирования требуют полного описания последовательности шагов (команд), которые нужно предпринять, чтобы решить задачу . К ним относятся СИ, ПАСКАЛЬ, АССЕМБЛЕР.

ПРОЛОГ — язык ДЕКЛАРАТИВНЫЙ. Он базируется на естественных для человека логических принципах. Нужно уметь составить формальное описание задачи, используя понятия объектов различных типов и отношений между ними. Иными словами, нужно описать все ФАКТЫ (ИСТИННЫЕ УТВЕРЖДЕНИЯ) и ПРАВИЛА (позволяющие ВЫВЕСТИ из уже имеющихся истинных утверждений новые), описывающие данную ситуацию. Затем пользователь задает вопрос или, пользуясь терминологией Пролога, задает ЦЕЛЬ.

Далее Пролог пытается ДОКАЗАТЬ заданную цель, то есть вывести ее логическим путем из уже имеющихся фактов и правил. Этот логический вывод осуществляют ВСТРОЕННЫЕ УНИФИКАЦИОННЫЕ ПРОЦЕДУРЫ путем перебора имеющихся утверждений и попыток сопоставить их с доказываемой целью. В Прологе отсутствуют явные управляющие структуры типа IF...THEN...ELSE..., нет детального описания последовательности шагов. Все это — дело внутренних процедур. Иногда Пролог считают не языком программирования, а пользовательской оболочкой, позволяющей формулировать запросы к базе данных, записанной в Пролог — программе.

В связи с этим при использовании Пролога возникают две проблемы:

— эффективность программы (так как осуществляется перебор большого числа следствий из имеющихся правил);

— предсказуемость поведения программы (так как механизм логического вывода не программируется пошагово, а является скрытым внутренним механизмом).

Язык Turbo Prolog фирмы Borland является компромиссом между ПРОЛОГОМ в чистом виде и эффективным компилируемым языком. При грамотном программировании можно добиться большой эффективности выполнения. Особенно хорош Turbo Prolog для создания:

— систем управления динамическими базами данных;

— экспертных систем;

— программ с естественно-языковым интерфейсом.

2. Пролог и логика предикатов. Внешние цели

Логические взаимосвязи между фактами и объектами в логических языках описываются с помощью обозначений, унаследованных из логики предикатов. Синтаксически все объекты данных и отношения представляют собой ТЕРМЫ.

Пример 1.1

«Мэри любит яблоки»

Два объекта «Мэри» и «яблоки» связаны отношением «любит».

Отношение, связывающее объекты, называется ПРЕДИКАТОМ.

Предикат «любит» связывает объекты «Мэри» и «яблоки»:

любит (Мэри, яблоки). % Факт

и «любит», и «яблоки», и «любит (Мэри, яблоки)» — все это термы.

«Бет любит то же самое, что и Мэри»

Используем местоимение «это», которое может обозначать любое имя существительное. «Это» — переменная, которая может принять ряд конкретных значений.

«Бет любит это, если Мэри любит это.»

Условная часть: «если Мэри любит это».

Следствие: «Бет любит это».

Если условие истинно, то истинно и следствие.

любит (Бет, это):- % Правило

любит (Мэри, это).

Простые объекты могут быть двух типов:

— конкретные объекты или КОНСТАНТЫ (Мэри,Бет,-1,0.21);

— ПЕРЕМЕННЫЕ (это).

По правилам Пролога константы пишутся со строчной буквы, переменные — с прописной (мери, бет, X,Y).

Все известные нам соотношения можно переписать так:

likes(mary,apples).

likes(beth,X):-

likes(mary,X).

Это практически готовая Пролог — программа.

Можно подвести итог:

Пролог — программы состоят из утверждений.

Факт является утверждением, безусловно, истинным.

Правило — утверждение, истинное при некоторых условиях.

Условная часть правила называется ТЕЛОМ, следствие (или часть вывода) — ГОЛОВОЙ правила. Если тело правила состоит из нескольких условий, они могут быть связаны конъюнкцией (логическим «И»), обозначающейся запятой «,»:

любит (джон, X):-

любит (мэри,X), % конъюнкция двух условий

любит (энн, X).

или дизъюнкцией (логическое «ИЛИ»), обозначающейся точкой с запятой «;».

Кроме того, от предикатов разрешатся брать отрицание:

Not (likes (mary, oranges)). % Мэри не любит апельсины.

ЗАПРОС или ЦЕЛЬ также является утверждением Пролог — программы.

Если ФАКТ — ПРАВИЛО С ПУСТЫМ ТЕЛОМ, ТО ЦЕЛЬ (ЗАПРОС или формулировка задачи, которую нужно решить) — ПРАВИЛО, ИМЕЮЩЕЕ ТОЛЬКО ТЕЛО.

Турбо-Пролог использует как внутренние цели, которые содержатся в программе, так и внешние. Если внутри программы не содержится цель, то система после запуска программы выдает приглашение Goal:, и пользователь вводит цель с клавиатуры. После удовлетворения внешней цели выполнение программы не завершается. Система просит ввести следующую внешнюю цель. Прекратить запросы можно, нажав при выдаче очередного приглашения ESC.

Ответ системы на запрос представляет собой множество объектов, которые удовлетворяют запросу.

Это означает, что, в ответ на внешний запрос система находит все возможные наборы значений для переменных, содержащихся в запросе.