Реферат — История создания и развития языка Prolog

Работа добавлена на сайт samzan.ru: 2015-07-10

Оглавление

Введение ………………………………….……………..……………….…..2 стр.

1.История создания и развития языка Prolog ………………………….…… 3 стр.

2. Сферы использования ………………..……….…….……….…………… 4 стр.

3. Среда разработки «SWI-Prolog»…………….……………….…………… 5 стр.

4. Среда разработки «Тurbo Prolog» ………………………..………..………22 стр.

5. Среда разработки » Visual Prolog » ..…………………….…….…………..28 стр.

6. Заключение  ..…………………………………………….…………….…..32 стр.

7. Глоссарий терминов ……………………………………………………….33 стр.

8. Список литературы………………………………………………………..35 стр.

Введение

Prolog — язык логического программирования. Логическое программирование, так же как и родственное ему направление — функциональное программирование, радикально отклоняется от основного пути развития языков программирования. Логическое программирование строится не с помощью некоторой последовательности абстракций и преобразований, отталкивающейся от машинной архитектуры фон Неймана и присущего ей набора операций, а на основе абстрактной модели, которая никак не связана с каким-либо типом машинной модели. Логическое программирование базируется на убеждении, что не человека следует обучать мышлению в терминах операций компьютера (на некотором историческом этапе определенные ученые и инженеры считали подобный путь простым и эффективным), а компьютер должен выполнять инструкции, свойственные человеку. В своем предельном и чистом виде логическое программирование предполагает, что сами инструкции даже не задаются, а вместо этого явно, в виде логических аксиом, формулируются сведения о задаче и предположения, достаточные для ее решения. Такое множество аксиом является альтернативой обычной программе. Подобная программа может выполняться при постановке задачи, формализованной в виде логического утверждения, подлежащего доказательству, — такое утверждение называется целевым утверждением. Выполнение программы состоит в попытке решить задачу, т. е. доказать целевое утверждение, используя предположения, заданные в логической программе.

Логическое программирование — это подход к информатике, при котором в качестве языка высокого уровня используется логика предикатов первого порядка в форме фраз Хорна. Логика предикатов первого порядка — это универсальный абстрактный язык предназначенный для представления знаний и для решения задач. Его можно рассматривать как общую теорию отношений. Логическое программирование базируется на подмножестве логики предикатов первого порядка, при этом оно одинаково широко с ней по сфере охвата. Логическое программирование дает возможность программисту описывать ситуацию при помощи формул логики предикатов, а затем, для выполнения выводов из этих формул, применить автоматический решатель задач (т. е. некоторую процедуру). При использовании языка логического программирования основное внимание уделяется описанию структуры прикладной задачи, а не выработке предписаний компьютеру о том, что ему следует делать. Другие понятия информатики из таких областей, как теория реляционных баз данных, программная инженерия и представление знаний, также можно описать (и, следовательно, реализовать) с помощью логических программ. Однако вернемся к языку Prolog: первая часть введения посвящена истории языка Prolog.

  1.  История создания и развития языка Prolog

Разработка языка Prolog началась в 1970 году Аланом Кулмероэ и Филиппом Расселом. Их целью было создание языка, который мог бы делать логические заключения на основе заданного текста. Название Prolog является сокращением от «Programming in logic». Итак, Prolog, как язык, был разработан в Марселе в 1972 году. Предварительно на основе некоторого «принцип резолюции» Ковальского, сотрудника Эдинбургского университета, была создана модель, на основе которой и был разработан механизм логических выводов.

Первая реализация языка Prolog с использованием компилятора Никлауса Вирта «Algol-W» была закончена в 1972 году, а основы современного языка были заложены позднее, в 1973 г. Использование языка Prolog постепенно распространялось среди тех, кто занимался логическим программированием, в основном благодаря личным контактам, а не через коммерциализацию продукта. В настоящее время существует несколько различных, но довольно похожих между собой версий языка. Хотя стандарта языка Prolog не существует, однако версия, разработанная в Эдинбургском университете, стала наиболее широко используемым вариантом.

Теория логического программирования со временем совершенствовалась. Существенный вклад в ее развитие внесла работа Р. Ковальского «Логика предикатов как язык программирования». В 1976 г. Ковальский и М. ван Эмден предложили два подхода к прочтению текстов логических программ — процедурный и декларативный. Оба этих подхода стали активно использоваться при написании программ на языке Prolog.

Только в 1977 году Д. Уоррен и Ф. Перейра создают в университете Эдинбурга интерпретатор/компилятор языка Prolog для ЭВМ DEC-10, тем самым переведя методы логического программирования в практическую плоскость. Позднее в 1980 году К. Кларк и Ф. Маккейб в Великобритании разработали версию Prolog для персональных ЭВМ.

Также есть интересный факт: в октябре 1981 года мир облетела новость о японском проекте создания ЭВМ пятого поколения. В основу методологии разработки программных средств было положено логическое программирование. Целью проекта декларировалось создание систем обработки информации, базирующихся на знаниях, а главным средством реализации должен был стать именно язык Prolog. В это же время (начало 1980-х годов) появляется множество коммерческих реализаций Prolog практически для всех типов компьютеров. К наиболее известным можно отнести «Visual Prolog», «Тurbo Prolog», «SWI-Prolog». и др.

Существует мнение, что Prolog — уже почти умерший язык, что он за небольшой промежуток времени (1970-1980-е годы) смог пройти весь жизненный цикл — от начальных разработок, стремительного повышения интереса со стороны узких специалистов, затем стремительный взлет популярности, падение интереса и почти полное забвение. Мнение вызвано тем, что такая судьба — обычное явление в мире информационных технологий, где новые, более совершенные, дидактически верные и теоретически более красивые языки программирования возникают каждый год и тихо умирают. Сторонники мнения аргументируют его тем, что структура Prolog-программ очень трудна для восприятия из-за того, что иногда невозможно визуально предугадать ход логического вывода — единственный предикат-факт, запрятанный где-то в конце текста программы, может направить работу в совершенно непредсказуемое русло. В некотором они правы: трудность сопровождения Prolog-программ и трудность мышления на Prolog для рядовых программистов оказались непреодолимыми препятствиями для его широкого распространения. Да и, конечно, во времена разработки Prolog ждали от него большего, но потом оказалось, что сам по себе язык программирования помочь в решении серьезнейших задач, например, связанных с принятием компьютером решений (machine reasoning), не может. Но всё же язык Prolog используется и сегодня при решении целого класса достаточно специфических задач.

  1.  Сферы использования

У каждого из языков программирования есть свой круг задач, при решении которых он используется с наибольшей эффективностью.

Для Prolog это задачи, связанные с разработкой систем искусственного интеллекта (различные экспертные системы, программы-переводчики, интеллектуальные игры). Он используется для обработки естественного языка и обладает мощными средствами, позволяющими извлекать информацию из баз данных, причем методы поиска, используемые в нем, принципиально отличаются от «традиционных».

Prolog нашел применение и в ряде других областей, например, при решении задач составления сложных расписаний. При этом он не является универсальным языком программирования и не предназначен, например, для решения задач, связанных с графикой или численными методами.

Prolog используется в различных системах, но обычно не в качестве основного языка, а в качестве языка для разработки некоторой части системы. Так Prolog достаточно часто используется для написания функций взаимодействия с базами данных. Prolog используется при разработки расширенных поисковых систем, то есть систем, которые не просто занимаются поиском текста (поиск текста — задача техническая, инженерная), но и играют роль некоторой «отвечающей системы» — программного комплекса, который умеет извлекать информацию (знания) из большой выборки текстовых файлов, а затем вести диалог с пользователем, отвечая (в обычном понимании этого слова) на вопросы посвященный этой теме. Почему в таком случае используется именно Prolog, а не какой-либо другой язык? Потому что именно он разрабатывался для задач, связанных с так называемым «искусственным интеллектом».

Также Prolog используется при написании новых специфичных языков программирования. Например, функциональный язык Erland постороен на основе Prolog. По сути, Erland является усовершенствованием Prolog для некоторых специфических целей, связанных с задами реального времени.

Некоторые приложения в таких областях, как экспертные системы, планирование, машинное обучение, так называемый «искусственный интеллект» игр, реализованы именно с помощью Prolog. Так что, несмотря на то, что сферы использования этого языка, хоть и не так велики и обширны, как сферы применения «традиционных» языков (C, Java и т.п.), представляют свой интерес.

  1.  Среда разработки «SWI-Prolog»

Интерактивная среда разработки «SWI-Prolog» была разработана в Swedish Institute of Computer Science, отсюда происходит и название этой версии.

Открыв окно интерпретатора, вы увидите несколько строк о данном продукте, а после них и своеобразное приглашение задать вопрос Prolog-системе.

Программа интерпретатора языка Пролог выполняет следующие функции:

  1.  Ввод, сохранение и редактирование программы на языке Пролог.
  2.  осуществление отладочного режима работы с просмотром вызовов предикатов и значений переменных.
  3.  запуск программы на исполнение
  4.  возможность приостановки работающей программы на контрольной точке, установленной в тексте программы, или при нажатии кнопки «Пауза».

Интегрированная среда разработчика предоставляет разработчику следующие возможности:

  1.  создание нового файла программы;
  2.  открытие существующего файла программы;
  3.  сохранение файла;
  4.  сохранение файла под новым именем;
  5.  выход из системы;
  6.  редактирование файла с использованием буфера обмена;
  7.  настройку параметров программы Пролог;
  8.  настройку редактора;
  9.  запуск программы на исполнение;
  10.  временную остановку работы программы;
  11.  доступ к файлу справки.

Определение отношений

В отличие от других языков программирования Prolog не является универсальным языком программирования. Он ориентирован на решение задач с использованием исчисления предикатов. Напомним, что предикатом в логике называется понятие, определяющее предмет суждения (субъект) и раскрывающее его содержание.

Целью разработки языка Prolog было предоставить возможность задания спецификаций решения и позволить компьютеру вывести из них последовательность выполнения для этого решения, а не задание алгоритма решения задачи, как в большинстве изученных нами языков.

Язык Prolog, как интерпретатор, приглашает пользователя вводить информацию. Пользователь набирает запрос или имя функции. Выводится значение (истина — yes, или ложь — no) этого запроса, а также возможные значения переменных запроса, присвоение которых делает запрос истинным (то есть унифицирует запрос). Если ввести символ «;», тогда отображается следующий набор значений переменных, унифицирующий запрос, и так до тех пор, пока не исчерпается весь набор возможных подстановок, после чего Prolog печатает no и ждет следующего запроса. Возврат каретки воспринимается как прекращение поиска дополнительных решений.

Хотя выполнение программы на языке Prolog основывается на спецификации предикатов, оно напоминает выполнение программ на аппликативных языках LISP или ML Разработка правил языка Prolog требует того же рекурсивного мышления, что и разработка программ на этих аппликативных языках.

Язык Prolog имеет простые синтаксис и семантику. Поскольку он ищет отношения между некоторыми рядами объектов, основными структурами данных являются переменная и список. Правило ведет себя подобно процедуре, за исключением того, что концепция унификации более сложна, чем относительно простой процесс подстановки параметров в выражения.

Язык Prolog изначально призван оперировать не с числами, а с нечисловыми объектами и отношениями между ними. Например мы можем, что называется, «совершенно не стеснясь в выражениях», задать любое отношение из жизни:

street( saint-petersburg, nevskii).

street( moscow, arbat).

Как вы уже поняли отношение street( , ) задает отношение принадлежности улицы к городу. Теперь мы можем задать системе Prolog вопрос, в каком городе находится, к примеру, Невский проспект (nevskii). Причем сделаем мы это вполне ясным образом:

?- street( X, nevskii).

Система Prolog конкретизирует переменную X и выдаст ответ

X = saint-petersburg.

Но это еще не все: если Невский проспект есть и в каком-нибудь Бобруйске, и это отношение мы так же задали:

street( bobruisk, nevskii).

То в ответе на наш вопрос система Prolog укажет оба города:

X = saint-petersburg;

X = bobruisk;

 Таким образом, не написав никакой формализации определения объектов «город», «улица» и принадлежности одного другому мы смогли получить ответ на вопрос об отношении между этими объектами. Если бы мы захотели написать программу, реализующую то же самое на каком-нибудь «традиционном» языке программирования, мы бы не смогли обойтись без таких конструкций, как цикл и условный оператор.

В системе Prolog мы можем задавать любые отношения между объектами, а потом и вопросы с неопределенными переменными и отношениями, введенными ранее в программе, и система Prolog будет конкретизировать переменные и выдавать все возможные значения при использовании которых, вместо переменных наш запрос будет верным. Программа на языке Prolog состоит из предложений, которые относятся к трем типам: факты, правила и вопросы.

Основополагающие факты, связанные с программированием на языке Prolog:

— Отношение может быть определено на основе фактов путем задания n-элементных кортежей объектов, которые удовлетворяют отношению, или путем задания правил, касающихся этого отношения.

— Процедура представляет собой набор предложений, касающихся одного и того же отношения.

— Выполнение запросов об отношениях, передаваемых системе в виде вопросов, напоминает выполнение запросов к базам данных. Ответ системы Prolog на вопрос состоит их множества объектов, которые соответствуют этому вопросу.

— В системе Prolog для определения того, соответствует ли объект вопросу, часто применяется сложный процесс, который связан с выполнением логического вывода, рассмотрением многих альтернатив и, возможно, перебора с возвратами. Все эти операции выполняются системой Prolog автоматически и, в принципе, скрыты для пользователя.

Объекты данных

Система Prolog распознает тип объекта по его синтаксической форме. Это возможно благодаря тому, что в синтаксисе языка Prolog определены разные формы для объектов данных каждого типа. Различие между атомами и переменными в том, что переменные начинаются с прописных букв, а атомы — со строчных букв. Системе Prolog не требуется сообщать какую-либо дополнительную информацию (наподобие объявления типа данных) для того, чтобы она распознала тип объекта.

Атомы представляют собой строки, состоящие из следующих символов:

прописные буквы A, B,…Z;

строчные буквы a, b, …, z;

цифры 0, 1, 2, …, 9;

специальные символы, такие как «+», «-«, «*», «/», «<«, «>», «=», «:», «.», «&», «_», «~».

Атомы могут формироваться тремя перечисленными ниже способами:

1.Как строки букв, цифр и символов подчеркивания, начинающиеся с прописной буквы: anna, x_25, alpha_beta_procedure, miss_Jones.

2.Как строки специальных символов: <—>, ===>, …, ::= (При использовании атомов в этой форме необходимо соблюдать осторожность, поскольку некоторые строки специальных символов уже имеют предопределенное значение; в качестве примера можно привести «:-«).

3.Как строки символов, заключенных в одинарные кавычки. Такой формат является удобным, если, требуется, например, применить атом, который начинается с прописной буквы. Заключив его в кавычки, можно подчеркнуть его отличие от переменных: ‘Tom’, ‘South_America’.

Числа в Prolog бывают целыми и вещественными. Синтаксис целых чисел прост, как это видно из следующих примеров: 1, 1313, 0, -97. Не все целые числа могут быть представлены в машине, поэтому диапазон целых чисел ограничен интервалом между некоторыми минимальным и максимальным числами, определяемыми конкретной реализацией Prolog. Обычно реализация допускает диапазон хотя бы от -16383 до 16383, а часто, и значительно более широкий.

Синтаксис вещественных чисел виден из следующих примеров: 3.14, -0.0035, 100.2. При обычном программировании на Prolog вещественные числа используются редко. Причина этого кроется в том, что Prolog — это язык, предназначенный в первую очередь для обработки символьной, а не числовой информации, в противоположность языкам типа Фортрана, ориентированным на числовую обработку. При символьной обработке часто используются целые числа, например, для подсчета количества элементов списка; нужда же в вещественных числах невелика.

Кроме отсутствия необходимости в использовании вещественных чисел в обычных применениях Prolog, существует и другая причина избегать их. Мы всегда стремимся поддерживать наши программы в таком виде, чтобы их смысл был предельно ясен. Введение вещественных чисел в некоторой степени нарушает эту ясность из-за ошибок вычислений, связанных с округлением во время выполнения арифметических действий.

Правила записи имен переменных

Имена переменных — это строки, состоящие из букв, цифр и символов подчеркивания. Начинаться имена переменных должны с прописной буквы или символа подчеркивания: X, Result, Answer1, _x. Область определения одной переменной представляет собой одно предложение, то есть если одно и то же имя встречается в нескольких предложениях, то в каждом из них оно означает разные переменные. В свою очередь каждое вхождение некоторой переменной в одном и том же предложении соответствует одной и той же переменной. Для констант же ситуация иная: один и тот же атом всегда обозначает во всех предложениях, а, следовательно, и во всей программе, один и тот же объект.

Структура объекта

Структурированными объектами (или структурами) называются объекты, которые имеют несколько компонентов. Сами компоненты, в свою очередь, также могут быть структурами. Например, дата может рассматриваться как структура с тремя компонентами: число, месяц, год. Несмотря на то, что структуры состоят из нескольких компонентов, они рассматриваются в программе как целостные объекты. Для соединения компонентов в целостный объект необходимо выбрать функтор. В данном примере подходящим функтором является date. Например, дату «5 декабря 2005 года» можно записать следующим образом:

date( 5, december, 2005)

Простые объекты в языке Prolog — это атомы, переменные и числа. Для представления объектов, имеющих несколько компонентов, используются структуры. Структуры создаются с помощью функторов, каждый из которых определяется своим именем и арностью. При этом, тип объекта распознается системой Prolog исключительно по его синтаксической форме.

Арифметические операции

Prolog рассчитан главным образом на обработку символьной информации, при которой потребность в арифметических вычислениях относительно мала. Поэтому и средства для таких вычислений довольно просты. Для осуществления основных арифметических действий можно воспользоваться несколькими предопределенными операторами.

+    — сложение

–    — вычитание

*    — умножение

/    — деление

**   — возведение в степень

//   — целочисленное деление

mod  — деление по модулю, вычисление остатка от целочисленного деления

Обратите внимание на то, что это и есть тот исключительный случай, в котором оператор может фактически вызвать на выполнение операцию. Но даже в таких случаях для осуществления арифметических действий требуется дополнительное указание. Например, следующий вопрос представляет собой наивную попытку потребовать выполнения арифметического вычисления:

?- X = 1 + 2

Система Prolog «послушно» ответит:

X = 1 + 2

а не X = 3, как следовало ожидать. Причина этого проста — выражение 1 + 2 просто обозначает терм Prolog, в котором знак + является функтором, а 1 и 2 — его параметрами. В приведенной выше цели нет ничего, что могло бы вынудить систему Prolog фактически активизировать операцию сложения. Для определения этой проблемы предусмотрена специальная предопределенная операция is. Операция is вынуждает систему выполнить вычисление, поэтому правильный способ вызова арифметической операции состоит в следующем:

?- X is 1 + 2

В этом случае будет получен ответ:

X = 3

При этом операция сложения была выполнена с помощью специальной процедуры, которая связана с операцией is. Подобные процедуры принято называть встроенными процедурами.

Кроме того, в Prolog предусмотрены такие стандартные функции, как sin(x), cos(x), atan(x), log(x), exp(x) и т.д. Эти функции могут находиться справа от знака операции is.

Кроме того, при выполнении арифметических операций возникает необходимость сравнивать числовые значения.

Ниже перечислены операции сравнения:

X > Y.    — X больше Y.

X < Y.    — X меньше Y.

X >= Y.   — X больше или равен Y.

X =< Y.   — X меньше или равен Y.

X =:= Y.  — Значения X и Y равны.

X =\= Y.  — Значения X и Y не равны.

Списки

Одной из наиболее полезных, но, тем не менее, простых, структур считается список. Списки широко используются в нечисловом программировании, поскольку они представляют собой последовательности, состоящие из любого количества элементов. Как и все структуры, списки представляются системой Prolog в виде дерева, вершиной которого является первый элемент списка. Кстати, список может быть пустым — тогда он записывается в виде атома [], в остальных же случаях список можно рассматривать как объект, состоящий из двух компонентов: головы списка (первый компонент), хвост (остальная часть списка). В общем случае, головой может быть что угодно (любой объект Prolog, например, дерево или переменная); хвост же должен быть списком. Голова (Head) соединяется с хвостом (Tail) при помощи специального функтора:

.( Head, Tail)

Поскольку Tail — это список, он либо пуст, либо имеет свои собственную голову и хвост. Таким образом, выбранного способа представления списков достаточно для представления списков любой длины.

Важно то, что над списком можно проводить некоторые операции, среди которых:

-проверка, является ли некоторый объект элементом списка, что соответствует проверке объекта на принадлежность множеству;

-конкатенация двух списков, что соответствует объединению множеств;

-добавление нового объекта в список или удаление некоторого объекта из него.

Описание этих операций на языке Prolog достаточно понятно для тех, кто знаком с рассматриваемой структурой, поэтому здесь приведем в качестве примера лишь операцию принадлежности к списку. Представим отношение принадлежности как member( X, L), где Х — объект, а L — список. Цель member( X, L) истинна, если элемент Х встречается в L. Например, верно что member( b, [а, b, с] ) и, наоборот, не верно, что member( b, [а, [b, с] ] ), но member( [b, с], [а, [b, с]] ) истинно. Поэтому программа проверки отношения принадлежности к списку может быть основана на приведенных ниже рассуждениях.

X входит в состав L, если истинно одно из утверждений:

1) Х есть голова L, либо

2) Х принадлежит хвосту L.

Эту программу можно записать в виде двух предложений, первое из которых есть простой факт, а второе — правило:

member( X, [X | Tail] ).

member( X, [Head | Tail] ) :- member( X, Tail).

Ввод и вывод

Метод взаимодействия пользователя и программы, который применялся до сих пор, предусматривал ввод пользователем вопросов к программе и получение ответов программы в виде результатов конкретизации переменных. Так метод обмена данных является простым и достаточным для обеспечения ввода и вывода информации. Тем не менее, он часто является не совсем приемлемым, поскольку не обладает достаточной гибкостью.

Поэтому этот основной метод обмена данными необходимо дополнить в следующих областях:

-Ввод данных в форматах, отличных от вопросов, например в форме английских предложений;

-Вывод информации в любом требуемом формате;

-Ввод и вывод в любой компьютерный файл или на любое устройство, а не только на пользовательский терминал.

Обмен данными с несколькими файлами.

В принципе, программа может считывать данные их нескольких входных файлов, называемых также входными потоками, и выводить данные в несколько выходных файлов, которые называются выходными потоками. Данные, поступающие с пользовательского терминала, рассматриваются как ещё один входной поток. Аналогичным образом, данные, выводимые на терминал, представляют собой один из выходных потоков. Эти потоки не фиксируются на жестком диске, но связаны с информационными структурами, аналогичными файлам и известными под именем user. Имена других файлов могут быть выбраны программистом с учетом правил именования файлов в используемой компьютерной системе.

В любой момент времени в ходе выполнения программы Prolog «активны» только два файла: один для ввода, а другой для вывода. Эти два файла, соответственно, называются текущим входным потоком и текущим выходным потоком. В начале выполнения программы эти два потока соответствуют пользовательскому терминалу.

Файлы могут обрабатываться в языке Prolog двумя основными способами, в зависимости от формы представления в них информации. Один из способов состоит в том, что основным элементом файла является символ. В соответствии с этим один запрос на ввод и вывод вызывает чтение или запись единственного символа, для этого служат встроенные предикаты get, get0 и put.

Еще один способ обработки файлов состоит в том, что в качестве основных структурных блоков файла рассматриваются более крупные информационные единицы. Вполне естественно, что в качестве такой более крупной единицы, принят терм потока или в текущий выходной поток передается, соответственно, целый терм. Предикатами для передачи термов являются read и write. Разумеется, в этом случае информация в файле должна находиться в форме, совместимой с синтаксисом термов.

Встроенный предикат read используется для чтения термов из текущего входного потока, а цель read( X) вызывает чтение следующего терма, T, и согласование этого терма с X. Если X представляет собой переменную, то в результате X становится конкретизированной значением T, а если согласование оканчивается неудачей, цель read( X) не достигается.

Предикат read является детерминированным, поэтому в случае неудачи не выполняется перебор с возвратами для ввода другого терма. За каждым термом во входном файле должны следовать точка и пробел (или символ с обозначением конца строки).

Если предикат read( X) вызывается на выполнение после достижения конца текущего входного файла, то переменная X становится конкретизированной значением атома end_of_file.

Встроенный предикат write выводит терм, поэтому цель write( X) выводит терм X в текущий выходной файл. Терм X выводится в такой же стандартной синтаксической форме, в которой Prolog обычно отображает значения переменных. Полезным средством языка Prolog является то, что процедура write «умеет» отображать любые термы, независимо от того, насколько они могут быть сложными.

Принципы программирования на языке Prolog

Как и любая программа на любом другом языке, ваша программа на языке Prolog, должна быть правильной, эффективной, простой и читабельной, легко модифицируемой, хорошо документированной.

Также общеизвестно, однако не всегда выполняемо, то, что сначала лучше продумать задачу, подлежащую решению, и лишь потом приступать к написанию текста программы на конкретном языке программирования. Во-первых, следует сформулировать способ решения задачи, во-вторых приступить к его перенесению на язык программирования. На втором шаге неплохо использовать принцип пошаговой детализации. В соответствии с этим принципом окончательная программа получается после серии трансформаций или «детализаций» решения. Надо осознавать, что детализация касается не только процедур, но и структур данных. На начальных шагах работают обычно с более абстрактными, более крупными информационными единицами, детальная структура которых уточняется впоследствии. 

В случае языка Prolog мы можем говорить о пошаговой детализации отношений. Если существо задачи требует мышления в алгоритмических терминах, то мы можем также говорить и о детализации алгоритмов, приняв процедурную точку зрения на Prolog.

Одной из характерных особенностей языка Prolog является то, что в нем допускается как процедурный, так и декларативный стиль мышления при составлении программы. Какой из этих подходов окажется более эффективным и практичным, зависит от конкретной задачи. Обычно построение декларативного решения задачи требует меньших усилий, но может привести к неэффективной программе, поэтому выбирать приходится каждый раз.

Программируя на языке Prolog, нельзя забывать о его встроенных средствах, которые в случае грамотного использования, позволяют значительно упростить программу. Прежде всего, речь идёт об использовании рекурсии. Одна из причин того, что рекурсия так естественна для определения отношений на Prolog, состоит в том, что объекты данных часто сами имеют рекурсивную структуру. К таким объектам относятся списки и деревья. Список либо пуст (граничный случай), либо имеет голову и хвост, который сам является списком (общий случай). Двоичное дерево либо пусто (граничный случай), либо у него есть корень и два поддерева, которые сами являются двоичными деревьями (общий случай). Поэтому для обработки всего непустого дерева необходимо сначала что-то сделать с его корнем, а затем обработать поддеревья.

Часто бывает полезно обобщить исходную задачу таким образом, чтобы полученная более общая задача допускала рекурсивную формулировку. Исходная задача решается, тогда как частный случай ее более общего варианта. Обобщение отношения обычно требует введения одного или более дополнительных аргументов. Главная проблема состоит в отыскании подходящего обобщения, что может потребовать более тщательного изучения задачи.

В поиске идей для решения задачи часто бывает полезным обратиться к ее графическому представлению. Рисунок может помочь выявить в задаче некоторые существенные отношения. После этого останется только описать на языке программирования то, что мы видим на рисунке.

Использование графического представления при решении задач полезно всегда, однако похоже, что в Prolog оно работает особенно хорошо. Происходит это по следующим причинам:

1.Prolog особенно хорошо приспособлен для задач, в которых фигурируют объекты и отношения между ними. Часто такие задачи естественно иллюстрировать графами, в которых узлы соответствуют объектам, а дуги — отношениям.

2.Естественным наглядным изображением структурных объектов Prolog являются деревья.

3.Декларативный характер Prolog-программ облегчает перевод графического представления на Prolog. В принципе, порядок описания «картинки» не играет роли, мы просто помещаем в программу то, что видим, в произвольном порядке.

Разумеется, при программировании на Prolog, как и при программировании на любом другом языке, следует придерживаться определенных правил и стилистических соглашений для уменьшения вероятности ошибок, повышения удобства программ для чтения, отладки и модификации.

Prolog как язык для работы с базой данных

Использования языка Prolog в системе, оперирующей базой данных, например, в словаре. Коротко опишем структуру такого словаря. Вся хранимая информация в словаре является по сути своей реляционной базой данных (РБД). Например, есть список словарных статей. У каждой статьи есть свой уникальный код (primary key в терминологии РБД). Это целое число, которое однозначно идентифицирует статью в лексиконе. Более того, так как этот код присваивается статье при ее создании и не зависит от индекса статьи в списке, то оказывается возможным в ходе компиляции, например, продукционного правила запомнить ключ статьи — и в ходе выполнения правила оперировать именно ключами статей.

Аналогичный подход применяется для хранения любой другой информации в словаре. Грамматические координаты представляют собой именованные списки значений. Координатная пара — это имя координаты и имя состояния. В словаре координатная пара представляется двумя целыми числами — индексом координаты и индексом состояния. В данном случае вместо абстрактных ключей используется физический индекс элемента во внутреннем списке. Это упрощает работу и ускоряет доступ, но накладывает ограничения: после компиляции словаря нельзя менять списки с описаниями координат.

При работе грамматического конвейера использование ключей вместо самих описаний (например, вместо строковых констант) позволяет значительно увеличить эффективность — сравнение целых чисел в любом случае быстрее сравнения текстовых строк. Все это, однако, внутреннее устройство, которое внешне ничем себя не выдает. Манипуляции с записями во внутренних таблицах происходят под управлением алгоритмов, которые конструкции языка Prolog переводят в запросы к БД.

Но есть часть системы — Prolog-автомат — которая и внутренне и внешне является настоящей СУБД. Может показаться странным использование достаточно экзотичного языка вместо индустриального стандарта SQL. Тому есть простое объяснение. Prolog прост и в смысле описания (в принципе, это пара десятков страниц с примерами), и в смысле реализации. Движок SQL-базы данных очень сложен, начиная от парсера выражений (синтаксис SQL достаточно витиеват и разнообразен), и заканчивая необходимостью писать планировщик-оптимизатор запросов, который будет строить алгоритм доступа к данным для каждого поступающего SELECT, UPDATE и DELETE. Кроме этого, средства процедурного программирования — различные языки (например, PL/SQL или TSQL) — сами являются предметом отдельного изучения со своим синтаксисом и идеологией.

Prolog предлагает однородные средства как описания данных, так и доступа к ним. SQL таблицам прямо соответствуют предикаты. SQL отображения (VIEW) без каких-либо усложнений языка реализуются также через предикаты-теоремы ( :- ). Процедуры для работы с множествами записей в Prolog реализуются просто через AND-связку команд-предикатов.

Чтобы получить список сущностей, относящихся к типу action, в общем случае на SQL надо написать:

SELECT E.desc

FROM ENTITY E, ENTYTY_TYPE T

WHERE T.desc = ‘action’ AND E.id_type = T.id;

На Prolog этот запрос выглядит так:

subject( Sbj) :- entity_type( Id_type, «action»), entity( _, Sbj, Id_type)?

Различия невелики, она даже скорее формальны. К примеру, для подсчета записей о сущностях типа action потребуется минимальные дополнения в оба кода: SELECT COUNT(E.desc) … и count( subject(_), C )?

В данном случае count/2 — это встроенный предикат расширенного Prolog, который функционально аналогичен оператору COUNT языка SQL.

Разумеется, язык SQL предлагает некоторые мощные средства обеспечения целостности данных, которые отсутствуют в стандартном Prolog. Primary keys и foreign keys — удобные и эффективные способы гарантировать, что в БД не появятся записи, ссылающиеся на отсутствующие данные в других таблицах. Чтобы компенсировать этот изъян Prolog, в него были введены некоторые средства. В частности, с помощью встроенных предикатов можно объявлять требования к таблицам, то есть предикатам-записям одинаковой структуры и с одинаковым корневым атомом.

Построение экспертной системы с помощью языка Prolog

Экспертная система – это программа, которая ведет себя подобно эксперту в некоторой, обычно узкой, прикладной области. Типичные применения экспертных систем включают в себя такие задачи, как медицинская диагностика, локализация неисправностей в оборудовании и интерпретация результатов измерений. Экспертные системы должны решать задачи, требующие для своего решения экспертных знаний в некоторой конкретной области. В той или иной форме экспертные системы должны обладать этими знаниями. Поэтому их также называют системами, основанными на знаниях. Однако не всякую систему, основанную на знаниях, можно рассматривать как экспертную. Экспертная система должна также уметь каким-то образом объяснять свое поведение и свои решения пользователю, так же, как это делает эксперт-человек. Это особенно необходимо в областях, для которых характерна неопределенность, неточность информации (например, в медицинской диагностике). Часто к экспертным системам предъявляют дополнительное требование — способность иметь дело с неопределенностью и неполнотой.

В самом общем случае для того, чтобы построить экспертную систему, мы должны разработать механизмы выполнения следующих функций системы:

1.решение задач с использованием знаний о конкретной предметной области — возможно, при этом возникнет необходимость иметь дело с неопределенностью

2.взаимодействие с пользователем, включая объяснение намерений и решений системы во время и после окончания процесса решения задачи.

При разработке экспертной системы принято делить ее на три основных модуля:

1.база знаний,

2.машина логического вывода,

3.интерфейс с пользователем.

База знаний содержит знания, относящиеся к конкретной прикладной области, в том числе отдельные факты, правила, описывающие отношения или явления, а также, возможно, методы, эвристики и различные идеи, относящиеся к решению задач в этой прикладной области. Машина логического вывода умеет активно использовать информацию, содержащуюся в базе знаний. Интерфейс с пользователем отвечает за бесперебойный обмен информацией между пользователем и системой; он также дает пользователю возможность наблюдать за процессом решения задач, протекающим в машине логического вывода. Принято рассматривать машину вывода и интерфейс как один крупный модуль, обычно называемый оболочкой экспертной системы, или, для краткости, просто оболочкой.

Разработать относительно простую оболочку, при помощи которой, несмотря на ее простоту,  можно проиллюстрировать основные идеи и методы в области экспертных систем. Будем придерживаться следующего плана:

1.Выбрать формальный аппарат для представления знаний.

2.Разработать механизм логического вывода, соответствующий этому формализму.

3.Добавить средства взаимодействия с пользователем.

4.Обеспечить возможность работы в условиях неопределенности.

В качестве кандидата на использование в экспертной системе можно рассматривать, в принципе, любой непротиворечивый формализм, в рамках которого можно описывать знания о некоторой проблемной области. Однако самым популярным формальным языком представления знаний является язык правил типа «if-else» (или кратко: «if-else»-правил), называемых также продукциями. Каждое такое правило есть, вообще говоря, некоторое условное утверждение, но возможны и различные другие интерпретации. Кроме того, они обладают следующими привлекательными свойствами:

1.Модульность: каждое правило описывает небольшой, относительно независимый фрагмент знаний.

2.Возможность инкрементного наращивания: добавление новых правил в базу знаний происходит относительно независимо от других правил.

3.Удобство модификации (как следствие модульности): старые правила можно изменять и заменять на новые относительно независимо от других правил.

4.Применение правил способствует прозрачности системы.

Правила, содержащиеся в базе знаний, имеют вид

RuleName :: if Condition then Conclusion.

Где Conclusion (Заключение) — это простое утверждение, а Condition (Условие) — это набор простых утверждений, соединенных между собой операторами и и или.

Разработка оболочки. Если придерживаться правилам в том виде, в котором  они заданы, сразу видна, что они по своему смыслу эквивалентны правилам Prolog. Однако, с точки зрения синтаксиса Prolog, эти правила в том виде, как они написаны, соответствуют всего лишь фактам. Для того, чтобы заставить их работать, самое простое, что может прийти в голову, это переписать их в виде настоящих Prolog-правил. Тогда программа сможет отвечать на запросы, руководствуясь фактами, находящимися в нашей базе данных. Но в этом случае, хотя Prolog-система и отвечает на вопросы, используя для этого нашу базу знаний, нельзя сказать, что ее поведение вполне соответствует поведению эксперта. Это происходит по крайней мере по двум причинам:

1.Система не может объяснить свой ответ.

2.Прежде, чем задать вопрос, нужно ввести в систему всю необходимую информацию (в виде фактов). Но тогда пользователь, возможно, введет какую-нибудь лишнюю информацию или же упустит какую-нибудь информацию, имеющую решающее значение. В первом случае будет проделана ненужная работа, а во втором — система будет давать неверные ответы.

Для того чтобы исправить эти два недостатка,  система нуждается в более совершенном способе взаимодействия между пользователем и системой во время и после завершения процесса рассуждений. Интерпретатор должен принимать вопрос и искать на него ответ. Язык правил допускает, чтобы в условной части правила была and/or-комбинация условий. Вопрос на входе интерпретатора может быть такой же комбинацией под вопросов.

Использование языка Prolog при создании интернет-проектов

Множество появляющихся направлений в интернет-бизнесе приносит пользу в виде  развития логических языков программирования. Обмен данными между системами, совершенно отличающимися друг от друга, а также изощренность таких систем приводит к тому, что использование «обычных» языков программирования становится слишком сложным для решения поставленных задач. На помощь «приходят»  такие языки, как Prolog. Чтобы проиллюстрировать возможности языка Prolog, рассмотрим интернет-проект http://www.yourbet.com и применение Prolog для решения проблем поставленных проектом.

Проект http://www.yourbet.com представляет собой online-букмекер. Он предоставляет такие услуги, как online видео и аудио трансляции, отображение в режиме реального времени текущих результатов скачек и заключение букмекерских пари. Он предоставляет доступ к 60 ипподромам таких стран, как США, Канада и Австралия. Получить доступ к сервису можно или через web браузер, или скачав специальное приложение, которое доступно для скачивания на сайте.

Для быстрого обмена данными и доступа к базе данных используется связка «Java плюс Prolog». Следует отметить, что использование одновременно процедурного и логического языков программирования в разработке проекта сложно для программиста, так как стили мышления на этих двух типах языков различаются очень сильно. Но Java в данной связке используется только, как инструмент, для преобразования информации в такой вид, который будет «удобен для понимания» модулем, написанном на Prolog.

Система установленная на сервере, должна уметь обрабатывать входящую информацию в режиме online. То есть, получая данные с ипподрома обновлять соответствующий контент на сайте. При этом, делая это так, чтобы пользователь системы мог в любой время получить доступ к интересующей его информации.

Рассмотрим основы реализации такой системы. Сам процесс обработки информации можно поделить на пять частей:

1.Внешний сервер посылает сообщения, содержащие информацию с ипподромов.

2.Java-сервер принимает сообщения и вызывает обработчик.

3.Сообщение по особым правилам приводится к «необработанному» XML виду.

4.Из «необработанного» XML вида оно переводится в «специфический» XML вид.

5.В этом «специфическом» XML виде сообщение передается уже к серверу, где запущено основное приложение, обрабатывающему информацию в реальном времени.

Особо отмечается, что шаги с третьего по пятый реализованы на Prolog. Однако не будем вдаваться в подробности, связанные с XML-преобразованиями, а приведем пример преобразования XML в стандартный для Prolog вид. Утверждается, что эти преобразования тривиальны, в чем вы можете убедиться сами.

Например, в XML некоторый отрывок из сообщения выглядит так:

<odds track=’AQUEDUCT’ race=’3’ type=’WIN’>

   <entry horse=’1’ value=’3-2’/>

   <entry horse=’2’ value=’5-1’/>

</odds>

что эквивалентно следующей структуре на Prolog:

odds([track(‘AQUEDUCT’),race(3),type(‘WIN’)],[

  entry([horse(1),value(‘3-2’)],[]),

  entry([horse(1),value(‘3-2’)],[])])

Трудно себе представить успешный интернет-бизнес, который не требует выполнение таких задач, как обмен большим количеством информации, которая может быть при этом разной по своей «природе», и последующей фильтрации данной информации. Учитывая суть поставленной задачи, а также сложность реализации её на процедурных языках программирования, программист для ее решения применяет логический язык программирования, например, такой как Prolog.

Проект http://www.yourbet.com применил технологии так называемого «искусственного интеллекта» и общей архитектуры, чтобы развить подход к решению проблемы, который связывает Prolog и технологии обмена данными вместе. Такой подход позволяет эффективно решать данные проблемы в контексте пользовательских программ.

Таким образом, можно сделать вывод, что при надобности Prolog можно использовать в самых различных областях, разумеется, прежде всего, в качестве языка для написания некоторого «интеллектуального» ядра, обрабатывающего информацию и выдающего ответы на запросы по этой информации.

  1.  Среда разработки «Тurbo Prolog»

Наибольшую популярность получила система программирования Turbo Prolog — коммерческая реализация языка для IBM-совместимых ПК. Его первая версия была разработана датской компанией Prolog Development Center (PDC) в содружестве с фирмой Borland International в 1986 г. Система создавалась с серьезными отступлениями от неофициального стандарта языка, самым существенным из которых было введение строгой типизации данных, но это позволило значительно ускорить трансляцию и выполнение программ. Новый компилятор сразу же был по достоинству оценен праграммистами-практиками, хотя и вызвал критику в академических кругах.

Турбо-Пролог является компиляторно-ориентированным языком программирования высокого уровня. Он предназначен для программирования задач из области искусственного интеллекта. Как язык программирования ИИ Турбо-Пролог особенно хорош для создания экспертных систем, динамических баз данных, программ с применением естественно-языковых конструкций. Он также может быть использован и для других задач общего характера. Турбо-Пролог имеет окна, цветную графику и интерактивные средства ввода-вывода. Встроенные предикаты Турбо-Пролога и другие дополнительные возможности делают его пригодным для решения многих стандартных задач из сферы бизнеса, включая бухгалтерский учет, расчет зарплаты и представление графиков.

Наряду с Турбо-Прологом в США были созданы еще несколько реализаций Пролога: Arity Prolog, Prolog II, Wisdom Prolog и Micro Prolog. В отличие от них Турбо-Пролог имел великолепный полноэкранный редактор, множество рабочих окон и интерактивный диалоговый отладчик. Он поддерживал цветную графику IBM PC, снабженного цветным графическим адаптером (CGA) и расширенным графическим адаптером (EGA). Предикаты графики и система с графическим экранным пером являются составной частью Турбо-Пролога. Он также был снабжен средствами работы с последовательными файлами, файлами прямого доступа и двоичными файлами.

Такие языки программирования, как Паскаль, Бэйсик и Си относятся к разряду императивных или процедурных. Программа, написанная на императивном языке, состоит из последовательности команд, определяющих шаги, необходимые для достижения назначения программы. Пролог является декларативным языком. Программа на декларативном языке являет собой набор логический описаний, определяющих цель, ради которой она написана. Таким образом, в Прологе отсутствуют такие явные управляющие структуры, как DO WHILE и IF … THEN. Вместо расписывания шагов выполнения программы программист должен определить логический метод для достижения цели программы. Мощные внутренние унификационные процедуры  будут затем искать решение поставленной задачи.

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

В 1988 г. вышла значительно более мощная версия Turbo Prolog 2.0, включающая усовершенствованную интегрированную среду разработки программ, быстрый компилятор и средства низкоуровневого программирования. Кроме того, она предоставляла возможность работы с собственными внешними БД, dBase III и Reflex, интегрированным пакетом Lotus 1-2-3, графическим пакетом Paint Brush и другими приложениями. Фирма Borland распространяла эту версию до 1990 г., а затем компания PDC приобрела монопольное право на использование исходных текстов компилятора и дальнейшее продвижение системы программирования на рынок под названием PDC Prolog. В июне 1992 г. появилась версия 3.31 — эффективный универсальный инструмент профессиональных программистов, который вскоре стал одним из наиболее широко используемых. PDC Prolog 3.31 работал в среде  MS DOS, OS/2, UNIX, XENIX, PharLap DOS Extender, MS Windows. Эта версия была хорошо совместима с традиционными языками программирования, в первую очередь с Си. В ней были расширены возможности создания приложений с интерфейсом GUI (Graphical User Interface), принятым в MS Windows и OS/2.

Главное меню Турбо-Пролога высвечивает 7 доступных пользователю опций (команд) в верхней части экрана.

Команды определяются 7 функциями Турбо-Пролога, каковыми являются:

1. Запуск программы на счет (Run).

2. Трансляция программы (Compile).

3. Редактирование текста программы (Edit).

4. Заданий опций компилятора (Options).

5. Работа с файлами (Files).

6. Настройка системы в соответствии с индивидуальными потребностями (Setup).

7. Выход из системы (Quit).

Структура программ Турбо-Пролога

Любая программа, написанная на Турбо-Прологе, состоит из пяти разделов. Таковыми являются раздел описания доменов, раздел базы данных, раздел описания предикатов, раздел описания цели и раздел описания утверждений. Ключевые слова domainsdatabasepredicatesgoal и clauses отмечают начала соответствующих разделов. Назначение этих разделов таково:

— раздел domains содержит определения доменов, которые описывают раз-

личные классы объектов, используемых в программе;

— раздел database содержит утверждения базы данных, которые являются

предикатами динамической базы данных;

— раздел predicates служит для описания используемых программой предикатов;

— в разделе goal на языке Турбо-Пролога формулируется назначение создаваемой программы. Составными частями при этом могут являться некие подцели, из которых формируется единая цель программы;

— в раздел clauses заносятся факты и правила, известные априорно. О содержимом этого раздела можно говорить как о данных, необходимых для работы программы.

Внутренние подпрограммы унификации Турбо-Пролога

Турбо-Пролог (как и другие реализации Пролога) имеет внутренние подпрограммы для выполнения сопоставления и связанных  с ним процессов. Эти неотъемлемые части языка называются внутренними  подпрограммами унификации. Эти подпрограммы выполняют сопоставление целей и подцелей с фактами и  головами  правил  для того,  что чтобы доказать (или вычислить) эти цели или подцели.

Эти же подпрограммы также  определяют  сгенерированы  ли  новые подцели  правой часть правила. Программист в соответствии с логическим синтаксисом Турбо-Пролога  объявляет,  какие  факты  и правила  дают  тот или иной результат при различных подцелях, а внутренние подпрограммы унификации выполняют  оставшуюся  часть работы.

Турбо-Пролог обеспечивает возможность включения в программу комментариев, которые обрамляются символами /* и */. Комментарии можно помещать в любом месте программы, причем на их длину нет практически никаких ограничений. Для того, чтобы служить своему назначению, комментарии должны содержать информацию о самой программе, имени программного файла, компиляторе, базе данных, а также о назначении каждого из предикатов и правил, которые не являются в достаточной степени очевидными.

Правила образования имен в Турбо-Прологе

Любое имя, используемое в Турбо-Прологе, должно состоять не более чем из 250 символов, первый из которых при этом должен обязательно быть строчной буквой латинского алфавита (от до z). Пробелы в записи имени недопустимы, однако можно использовать подчерк (_) в качестве разделителя компонент так, как это сделано ниже:

employee_name

color_of_box

wild_animal_kingdom

beginning_of_year_to_date_activities_report

Большинство программистов, однако, предпочитают пользоваться более краткими именами. Имена, приведенные в качестве примера очень удобны для понимания программы, однако у них есть весьма существенный недостаток — они длинны. В Турбо-Прологе предусмотрена возможность задавать имена, состоящие всего из одной буквы:

domains

a, b = symbol

predicates

s(a,b)

clauses

s(brave,daring

Описание доменов и предикатов

Турбо-Пролог требует указания типов объектов для каждого предиката программы. Некоторые из этих объектов могут быть, к примеру, числовыми данными, другие же – символьными строками. В разделе predicates, поэтому, Вы должны задать тип объектов каждого из предикатов. Для того чтобы предикат likes можно было использовать в программе, необходимо сделать следующее описание:

predicates

likes(symbolsymbol)

Это описание означает, что оба объекта предиката likes относятся к типу symbol. Этот тип является одним из базисных типов Турбо-Пролога. В некоторых случаях, однако, представляется необходимым иметь возможность несколько больше конкретизировать тип используемого предикатом объекта. Например, в предикате likes объекты имеют смысл «тот, кто любит» и «вещь, которую любят». Турбо-Пролог позволяет конструировать свои собственные типы объектов из базисных типов доменов. Предположим, для примера, что объектам предиката likes Вы хотите присвоить соответственно имена person и thing. Тогда в разделе программы domains должны появиться такие описания:

domains

personthing = symbol

predicates

likes(person, thing)

Имена person и thing при этом будут обозначать некие совокупности (домены) значений.

Использование файлов на внешних носителях

Работа с данными,  содержащимися  в  файлах  называется файловой обработкой. К числу наиболее типичных операций над файлами относятся создание файла, запись в файл и чтение  из файла,  модификация  уже  существующего файла и добавление к нему новых данных.

  Турбо-Пролог обеспечивает великолепные возможности  для удобной и эффективной обработки файлов. Сюда можно  включить встроенные  предикаты для открытия и закрытия файлов, чтения из файла и записи в файл, изменения данных в файле, а  также дозапись  в уже существующий файл. Данные из файла могут обрабатываться либо как непрерывный поток символов,  либо  как структурированные объекты типа записей базы данных.

Большинство современных языков программирования высокого уровня обеспечивает интерфейс  с  операционной  системой, который позволяет работать с различными физическими устройствами. Турбо-Пролог обеспечивает эту возможность путем  поддержания  предикатов,  осуществляющих  назначения логических устройств. Встроенный  предикат  Турбо-Пролога readdevice позволяет переадресовать логическое  устройство  ввода.  Аналогично встроенный предикат writedevice  осуществляет  переадресацию устройства вывода информации.

Стандартная конфигурация устройств

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

Использование окон, графики, звука

По  традиции,  все  программные  продукты  фирмы   Borland International  обладают первоклассными средствами для использования окон, графики  и  звука.  Система  программирования  Турбо-Пролог  не  является  исключением.  При помощи Турбо-Пролога можно создать несколько окон, используя предоставляемые  цветовые  палитры, установить цвет текста и цвет фона, изменить размеры окон, переключить ввод и вывод с одного  окна  на  другое.

В систему программирования Турбо-Пролог включено пять предикатов,  позволяющих программе управлять окнами различных размеров. Это  предикаты  makewindow,  shiftwindow,  removewindow, clearwindow и gotowindow. С их помощью можно создавать несколько  окон, выполнять ввод и вывод в определенные окна и устанавливать атрибуты окон.

Средства  языка поддерживают Цветной Графический Адаптер и Расширенный Графический Адаптер, обеспечивая тем самым возможность работать в различных графических режимах. Графические предикаты Турбо-Пролога  поддерживают  Цветной Графический  Адаптер  (CGA) фирмы IBM и Расширенный Графический Адаптер (EGA) фирмы IBM, а также совместимые с ними. Графика в системе программирования Турбо-Пролог в основном реализуется  предикатами  dot и line. С помощью зтих предикатов на экран дисплея выводятся изображения, состоящие из  геометрических  фигур. Управление графическими режимами и цветами в Турбо-Прологе осуществляется  с  помощью  параметров, задаваемых в предикатах graphics и makewindow. Предикат graphics используется для включения графического режима CGA или EGA. Предикат   graphics   и   параметры   Screen_attribute   и Frame_attribute предиката makewindow  взаимодействуют  довольно сложным  образом.  И  если говорить о версии 1.1, то можно сказать, что Турбо-Пролог в этом случае ведет себя причудливо. Однако данное замечание не касается  более  поздних  версий  Турбо-Пролога. При  программировании компьютерной графики необходимо учитывать некоторые технические аспекты, усложняющие задачу  программиста.  Разработчики  графических  мониторов и адаптеров используют отличающуюся от рассмотренной шкалу  горизонтальных  и вертикальных  размеров.  Эти размеры масштабируются посредством параметра, называемого видовым отношением (aspect ratio). Видовое отношение определяется как отношение высоты  экрана  к  его ширине и измеряатся в единицах линий электронного луча, помещающихся  на экране (video scan lines).

Кроме поддержки многооконности  и  цветной  графики,  Турбо-Пролог предоставляет звуковые средства. Программа Турбо-Пролога используя звуковые средства, способна производить музыкальные  тоны  в  широком  диапазоне частот, управляя продолжительностью их звучания. Турбо-Пролог  поддерживает  два предиката генерации звука: sound и beep. Предикат beep генерирует звук высокой  тональности. Его вид прост, поскольку этот предикат параметров не имеет. Правило beep используется для  различных  целей,  например для того, чтобы привлечь внимание пользователя в ситуации, когда  требуется ввод какой-либо информации либо чтобы уведомить о наличии ошибочного состояния. Даже простые музыкальные фрагменты сделают любую программу более интересной и информативной.

  1.  Среда разработки » Visual Prolog «

Версия PDC Prolog 3.31 уже включала средства для написания программ, работающих под управлением графических операционных систем, процесс разработки подобных приложений все еще носил рутинный характер. Для того чтобы сделать более простыми, удобными и быстрыми процессы написания, тестирования и модификации приложений на языке PDC Prolog, специалисты Prolog Development Center создали систему программирования под названием Visual Prolog 4.0, выпущенную 7 января 1996 г. В этой работе участвовал коллектив российских программистов под руководством Виктора Юхтенко, который позже стал техническим директором компании «Пролог-Софт», представляющей интересы PDC в России.

В декабре 1997 г. фирма PDC выпустила Visual Prolog 5.0, а с января 1999 г. приступила к распространению версии 5.1 Personal Edition функционирующую в средах Windows 3.1/95/98, NT, OS/2, SCO UNIX и Linux.

Вариант Personal Edition предназначен для некоммерческого использования, и сообщения об этом постоянно имеются во всех приложениях, созданных с его помощью. Кроме того, владельцы Personal Edition не обеспечиваются бесплатной технической поддержкой и на них не распространяются льготы и скидки при приобретении новых версий. В последней версии появились такие усовершенствования, как отладчик, специальный инструментарий и примеры разработки Web-узлов.

При разработке приложений в среде Visual Prolog используется подход, получивший название «визуальное программирование», при котором внешний вид и поведение программ определяются с помощью специальных графических средств проектирования без традиционного программирования на алгоритмическом языке. В результате получили систему программирования, отличающуюся исключительной логичностью, простотой и эффективностью.

В Visual Prolog входят различные элементы: прежде всего, интерактивная среда визуальной разработки (VDE — Visual Develop Environment), которая включает текстовый и различные графические редакторы, инструментальные средства генерации кода, конструирующие управляющую логику (Experts), а также являющийся расширением языка интерфейс визуального программирования (VPI — Visual Programming Interface), Пролог-компилятор, набор различных подключаемых файлов и библиотек, редактор связей, файлы, содержащие примеры и помощь.

Visual Prolog поддерживается различными ОС, в том числе MS-DOS PharLap-Extended DOS, всеми версиями Windows, 16- и 32-битовыми целевыми платформами OS/2, а также некоторыми другими системами, требующими графического пользовательского интерфейса. Все продукты PDC, включая Visual Prolog, — это системы, порождающие исполняемый код (EXE или DLL), что еще раз подтверждает высокую эффективность Пролога.

В зависимости от выбранного интерфейса разработчику обеспечивается доступ к множеству генераторов кода (Code Expert), всевозможным ресурсным редакторам и особым дополнительным VPI-предикатам, определениям и библиотекам. Ресурсные редакторы применяются для создания, компоновки и редактирования окон, диалогов, меню, панелей инструментов, строк помощи, строковых таблиц, ярлыков, курсоров, битовых карт и оперативной помощи. Генераторы кода на основе подобных структур создают необходимый первичный Prolog-код. В результате появляется первичный код («скелет»), готовый для компиляции, редактирования связей и выполнения. На листинге в качестве примера такого рода представлен автоматически сгенерированный первичный код.

По желанию программиста генераторы кода могут отобразить любую часть первичного текста программы в окне редактора для просмотра и дополнения в соответствии с логикой приложения, а также для преобразования «скелета» в полноценное приложение. Этот процесс реализуется с помощью различных функций: редактирования, выбора, поиска, перемещения и вставки.

Прикладной программный интерфейс высокого уровня облегчает проектирование Пролог-приложений с утонченным видовым пользовательским решением, использующим графические возможности современных ОС и аппаратных средств отображения информации. Ресурсы и инструментальные средства, требующиеся для таких приложений (окна, меню, диалоги, органы управления, перья, кисти, курсоры мыши, графические курсоры, рисунки и т. п.), представляются в виде несложных Пролог-структур.

Часто используемые команды меню могут быть выполнены и при помощи кнопок на панели инструментов:

Кнопка панели инструментовКоманда менюКнопка панели инструментовКоманда меню
File | NewEdit | Сору
File | OpenEdit | Paste
File | SaveProject (Compile file)
Edit | UndoProject | Build
Edit | RedoProject | Run
Edit | CutProject | Debug
Project | Test GoalOptions | Temporary | Font
Project | BrowseHelp | Local Help
Project | Tree

С помощью VPI можно создать мобильный исходный текст, а затем перекомпилировать его для работы как в 16-битовом режиме под управлением MS DOS или Windows, так и в 32-битовом режиме под управлением Windows NT, OS/2 PM и других ОС.

  1.  Заключение

Можно констатировать, что по большому счету ПРОЛОГ не занял в 90-е годы тех позиций, которые ему пророчили в начале 80-х. Нашумевший проект создания ЭВМ пятого поколения привел не к тем последствиям, которые от него ожидали. В практическом плане широкое внедрение графического интерфейса систем разработки программ и развитие визуального программирования придали «второе дыхание» традиционным процедурным языкам программирование. Широкую популярность завоевал объектно-ориентированный подход, позволяющий объединить описание объектов предметной области с процедурами их обработки, а также строить иерархические описания объектов с помощью механизма наследования.

В теоретическом плане самым важным является тот факт, что логика предикатов первого порядка, на которой построен ПРОЛОГ, имеет очевидные ограничения, поскольку требует структурно упрощать описываемую область. Говорить о доказательном выводе можно в сравнительно небольшом числе случаев, когда предметная область хорошо известна.

Большинство же реальных задач относится к условиям неполноты и некорректности данных и знаний. Поэтому большинство существующих экспертных систем активно используют такие механизмы обработки неточных и неопределенных знаний, как нечеткая логика и нейронные сети.

В данном курсовом проекте была рассмотрена  история создания и развития языка Prolog, сферы его использования.  Также рассмотрены структура программы  SWI-Prolog, Тurbo Prolog и Visual Prolog. Начиная с первой версии SWI-Prolog этот язык программирования  окончательно превратился в язык, способный решать практически любые задачи современного программирования, система программирования, которая с успехом может применяться не только в традиционных для логического программирования приложениях.  

Тем не менее, корни этого языка находятся в области логического программирования: имеется достаточно широкий круг задач, традиционно относящихся к задачам искусственного интеллекта, для которых первоначально предназначался, а впоследствии совершенствовался, язык Пролог (Программирование на основе Логики).

Тем не менее, интерес к ПРОЛОГу не ослабевает, поскольку логическое мышление остается основным инструментом умственной деятельности человека. Возможно, эпоха массового использования ПРОЛОГа просто наступит несколько позже.

  1.  Глоссарий терминов

Атом — имя, число без знака или символ.

База данных (БД) — совокупность утверждений,  содержащих данные (факты). Факты используются посредством правил  и предикатов, оперирующих над базой данных.

База знаний — динамическая база данных; обычно является составной частью экспертной системы.

Внешняя цель  — целевое утверждение,  вводимое пользователем во время работы программы на Турбо-прологе.

Внутренняя цель — целевое утверждение,  содержащееся  в  тексте  программы на Турбо-прологе.

Динамическая база данных — база данных,  в которую можно добавлять новые факты, корректировать их и удалять. Может располагаться на диске или в оперативной памяти.

Домен — диапазон и тип значений, определенные для базисного типа данных.  В  ТУРБО-ПРОЛОГе  базисными типами являются char,integer, real, string и symbol.

Запрос — обращение к программе с целью получения содержащейся в базе данных информации, формулируемое обычно в виде предложения или комманды.

Интеллектуальная база данных — база данных, допускающее общение на более или менее естественном для человеке языка (например, с естественно языковым интерфейсом),  позволяющая заносить но вые данные, модифицировать и уничтожать их.

Искусственный интеллект  (ИИ) — область науки об ЭВМ, связанная с проектированием компьютерных систем,  имеющих свойства, ассоциирующиеся с разумным поведением человека. Лексический анализ — метод анализа текста с использованием лексикона допустимых слов и фраз.

Метод деления списка на голову и хвост — в ПРОЛОГе метод работы с элементами непустого списка,  рассматриваемого как комбинация головы и хвоста списка.

Модуль — совокупность правил и предикатов ТУРБО-ПРОЛОГа для выполнения логически законченного набора операций.

Предикат — утверждение о наличии связи между объектами посредством задания имени отношения и доменов его аргументов. Примером может  служить  утверждение  likes(domain1,domain2),  где likes является именем предиката, а domain1 и domain2 — именами доменов объектов.

Предикат базы  данных — предикат,  применяемый с целью описания заносимых в базу данных фактов.

ПРОЛОГ (Prolog) — язык программирования; аббревиатура словосочетания «PROgramming LOGic».  Структура языка базируется на логике предикатов.

Рекурсия — свойство структуры или правила, заключающееся в возможности обращения к самой (-му) себе один  или  более  число раз.

Синтаксический анализ  —  метод  обработки текста путем анализа синтаксиса предложений; обычно требует синтаксического разбора предложений.

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

Цель — совокупность подцелей,  которые  пытается  удовлетворить ТУРБО-ПРОЛОГ. Может быть внешней или внутренней.

Экспертная система — компьютерная система, имитирующая построение экспертных  оценок  специалистом-человеком  в   некоторой узкой области знаний. Должна обладать средствами для оперирования над данными и способностью делать логические  выводы из имеющихся фактов.

8. Список литературы

1. Л. Стерлинг, Э. Шапиро « Искусство программирования на языке Пролог»

2. Малпас Дж. «Реляционный язык Пролог и его применение»

3. У.Клоксин, К.Меллиш « Программирование на языке Prolog»

4. Братко И. «Программирование на Prolog»

5. В. В. Терёхин «Учебное пособие TURBO PROLOG»

6. Анатолий Адаменко, Андрей Кучуков «Логическое программирование и Visual Prolog »

7. Ин Ц., Соломон Д. «Использование Турбо-Пролога»  /Пер. с англ. — М.: Мир, 1993.

8. Солдатова О.П, Лёзина И.В. «Логическое программирование на языке Visual Prolog» Учебное пособие Самара 2010

1. Уральский строительный дом4 2
2. РЕФЕРАТ дисертації на здобуття наукового ступеня доктора філософських наук.1
3. Тема- Вивчення конструкції черв~ячного редуктора
4. Лабораторная работа ’1 Арифметические команды микропроцессора на языке Ассемблер Цель работы- 1.html
5. РЕФЕРАТ дисертації на здобуття наукового ступеня кандидата психологічних наук Київ ~ Дисер
6. Разработка устройств цифрового формирования и обработки сигналов системы передачи дискретных сообщений по частотно ограниченным каналам связи.html
7. ЭКО Каскад осуществляет ведение государственной статистической отчётности по формам- 2ТП воздух 2ТП от
8. Культура, её структура и функции
9. Учебное пособие- Учет основных средств
10. УТВЕРЖДАЮ Проректор по учебной и воспитательной работе Г
11. 12009 n~jemn~ smlouvu P~edm~tem n~jmu byl bytov~ jednotk ~
12. Курсовая работа- Личность человека
13. МЕТОДИЧЕСКИЕ РЕКОМЕНДАЦИИ К ВЫПОЛНЕНИЮ КОНТРОЛЬНОЙ РАБОТЫ 1 Контрольная работа должна быть написана в
14. 2013г
15. а при совпадении в звучании и написании исконно русских и заиствованных слов например- ldquo;лукrdquo; исконно р
16. А В современном обществе изменилась модель образования
17. Технічна механіка
18. Лекция 2 4
19. щее и анальгезии рующее средство Возможны аллергические реакции
20. Структура та зміст тендерної документації

Материалы собраны группой SamZan и находятся в свободном доступе