Общие сведения
Turbo Prolog – это язык логического программирования высокого уровня, который относится к языкам компиляторного типа, с характерной для него быстротой счёта и компиляции, предназначенный, в основном, для решения задач из области искусственного интеллекта.
Среда Turbo Prolog комфортна для пользователей, так как снабжена окнами, интерактивными средствами для ввода и вывода данных, поддерживает цветную графику, а также предоставляет возможности по работе с файлами и имеет удобный интерфейс для отладки программ.
Turbo Prolog представляет собой одну из реализаций языка программирования Prolog, название которого происходит от словосочетания «PROgramming in LOGic», что означает «программирование при помощи логики».
Такой подход к составлению программ позволяет решать задачи, предполагающие полную концентрацию на рассмотрении объектов и связывающих их отношений. В результате итоговый ответ получается при помощи логического вывода из известных по условию задачи утверждений.
Для составления конструкций языка логического программирования Prolog используются так называемые фразы (предложения) Хорна, которые относятся к логике предикатов, представляющей собой особую формальную систему для проведения логических рассуждений.
Отметим, что конструкции языка Prolog являются достаточно понятными для восприятия, так как они получаются похожими на выражения естественного языка, основываясь на упрощённом синтаксисе логики предикатов.
В отличие от большинства известных языков программирования, которые являются императивными (например, Visual Basic, Pascal, C), язык Turbo Prolog относится к другой категории, являясь декларативным языком программирования.
Это означает, что программа, написанная на языке Prolog, представляет собой не чётко определённую последовательность действий, а набор фактов и правил для получения верных логических заключений. То есть здесь вместо стандартного указывания последовательности отдельных шагов программы от программиста требуется определить логический подход к решению задачи на основе заданных логических соотношений. И получается, что механизмы управления программой на Turbo Prolog неявно содержатся в конструкциях самого языка, а не предписываются какими-то командами.
И несмотря на то, что декларативные языки при написании программы могут показаться не очень строгими, решение с помощью них конкретной задачи, как правило, требует значительно меньше операторов, чем при использовании императивных языков.
Особенности создания программы на языке Turbo Prolog
Программы, написанные на языке Turbo Prolog, содержат в себе набор утверждений, т.е. деклараций различных логических взаимосвязей, соответствующих условию задачи, и тем самым объявляется, какие результаты могут получаться в зависимости от определённых ситуаций. Далее программист предоставляет самой системе выбрать подходящий способ решения задачи, и затем внутренние процедуры компьютерной программы будут искать её решение.
Программист на языке Turbo Prolog рассматривает объекты и задаёт отношения между ними, а также правила, при которых эти отношения будут истинными.
В программах, написанных на Prolog, существует три типа утверждений:
- факты (известные взаимоотношения, связанные с конкретными объектами, т.е. утверждения, истинность которых безусловна);
- правила (логические выражения, обязательно содержащие переменные и позволяющие прийти к некоторому выводу);
- цели (утверждения, для которых на основе известных в программе данных требуется определить, какими они будут – истинными или ложными).
По правилам синтаксиса языка Turbo Prolog каждое предложение (факт или правило) должно заканчиваться точкой. Все имена переменных начинаются с заглавной буквы, а имена символических констант (объектов) – со строчной буквы. Любое имя может включать латинские буквы, цифры и символ подчёркивания, только не начинаясь при этом с цифры.
Структура программы на языке Turbo Prolog
Программа на Turbo Prolog состоит из нескольких основных частей. К ним относятся область объявления констант, область описания доменов (типов объектов), раздел внутренней базы данных, блок описания предикатов, блок описания фактов и правил, а также раздел, в котором задаются цели. Ключевые слова constants, domains, database, predicates, clauses и goal указывают, соответственно, на начало каждой из этих секций.
Отметим, что не все из перечисленных разделов являются обязательными. Так, в Turbo Prolog включено более 200 встроенных стандартных предикатов и более 12 стандартных доменов, и они не требуют дополнительного объявления в случае их использования.
Рассмотрим информацию о каждой структурной составляющей программы подробнее.
В разделе constants можно задавать используемые в программе константы (например, zero = 0).
В секции domains объявляются любые нестандартные домены (типы данных), используемые в качестве аргументов предикатов, если они требуются в задаче.
К встроенным типам доменов относятся: char (символьный), integer (целый), real (вещественный), string (строковый), symbol (для последовательности из букв, цифр и символов подчеркивания, начинающейся с некоторой строчной буквы, либо для последовательности знаков в двойных кавычках), file (файловый).
domains / определение доменов /
number=integer
name, person=symbol.
Раздел database не является обязательным и содержит описание предикатов динамической (внутренней) базы данных, которые могут быть изменены в процессе выполнения программы без её перекомпилирования.
Обязательный раздел predicates служит для описания используемых в программе предикатов. Предикаты представляют собой строку символов, начинающуюся со строчной буквы. Они могут быть как без аргументов (например, «go» или «repeat»), так и с аргументами (в этом случае их типы объявляются вместе с определением предиката).
Заметим, что два предиката с одним и тем же именем могут иметь различную размерность (количество принимаемых ими аргументов), и тогда они воспринимаются программой как абсолютно разные.
predicates / определение предикатов /
mother (symbol, symbol)
father (symbol, symbol).
В основной секции программы clauses содержатся факты и правила статической базы данных, с которыми и будет работать Turbo Prolog при поиске ответов на вопросы задачи.
При формировании правил часто используются следующие символы: запятая (означает and), символ :- (соответствует слову if) и символ ; (означает or).
likes(ann,apples). / Анна любит яблоки /
fruit(apple). / Яблоко – это фрукт /
likes(mary,X) :- likes(ann,X). / Мэри любит то же, что и Анна /
В обязательном разделе goal формулируется цель (запрос) созданной программы. Цель в Turbo Prolog – это вопрос пользователя к системе о том, какие утверждения являются истинными.
В следующих целях выводы получены на основе фактов и правил из предыдущего примера:
likes(ann,What). / Что любит Анна? (ответом будет слово «яблоки») /
likes(mary,apples). / Любит ли Мэри яблоки? (ответ – TRUE) /
likes(ann,pineapples). / Любит ли Анна ананасы? (ответ – FALSE) /
Сначала анализируется цель и находятся факты или правила для её разрешения. Вывод получается при помощи соответствующей подстановки переменных и сопоставления заданных утверждений. Все имеющиеся в задаче цели последовательно доказываются друг за другом. Процесс нахождения соответствия между целью и фактом или правилом называется унификацией, в ходе которой Prolog находит все альтернативные решения, используя метод поиска с возвратом.
Общая цель может составляться из несколько частей – подцелей. Тогда они разделяются запятыми точно так же, как и отдельные условия в правилах. Например:
constants
pi = 3.14
goal
A=pi, write(A).