Лекция в виде презентации в формате pdf об основных концепциях языка пролог.
Фрагменты из лекции:
Введение:
Prolog — это язык программирования для символических, нечисловых вычислений.
Он особенно хорошо приспособлен для решения проблем, которые касаются объектов и отношений между объектами:
реализация экспертных систем и оболочек экспертных систем;
создание пакетов символьных вычислений;
доказательства теорем и интеллектуальные системы и т.д.
Концепция языка Prolog:
Prolog является декларативным языком программирования, который обеспечивает решение задач, выраженных в терминах объектов и отношений между ними
В Prolog отсутствуют операторы присваивания, ветвлений, циклов, безусловных переходов и указателей. Говоря не строго, в Прологе отсутствуют какие-либо действия.
Программирование на языке Пролог: Программа на языке Prolog состоит из следующих компонент :
Набор фактов об объектах и отношениях между ними;
Множество правил об объектах и отношениях между ними;
Единственный вопрос об объектах и отношениях между ними.
Факты:
Факт понимается как запись того отношения, значение которого истинно.
Форма записи факта: имя_предиката(аргумент {, аргумент}).
В терминологии Prolog любая совокупность фактов (и правил) называется базой данных.
Правила записи фактов:
Все имена предикатов и аргументов должны начинаться со строчной латинской буквы.
Перечисление аргументов – через запятую.
Каждый факт должен заканчиваться точкой.
Количество аргументов и вид отношений (направления отношений) определяются программистом и не меняются при выполнении программы.
Для того чтобы программа, написанная на языке Prolog, начала работу, к ней нужно обратиться с вопросом.
Для формулировки вопроса в программе на VisualProlog существует раздел goal.
goal likes(ivan,mary).
Обращение к Prolog с вопросом инициализирует процедуру поиска в базе данных, ранее введенной в систему.
Формирование ответа на вопрос:
Пролог просматривает БД в поисках предиката, сопоставимого с вопросом.
Предикаты считаются совпадающими, если они совпадают посимвольно и их соответствующие аргументы попарно совпадают.
Если предикат вопроса совпадает с предикатом одного из фактов в БД, то вопрос согласуется с БД.
При этом ответом на вопрос будет либо Yes, либо No.
Переменные:
Под переменной в Prolog понимается любое имя, начинающееся с прописной латинской буквы.
Примеры : Who, What, Ivan.
В отличие от процедурных языков, где имя переменной связывается с областью памяти, переменная в Prolog обозначает объект, значение которого может быть найдено.
Переменная называется конкретизированной, если существует объект, который она обозначает.
Если не известно, что именно обозначает переменная, то считается, что переменная не конкретизирована.
Использование переменных в вопросах
В вопросах переменные используются для того, чтобы найти какой-либо объект.
Пример: likes(ivan,X) – ответом будет: X = programming X = reading 2 Solutions Yes
При сопоставлении факта и вопроса, содержащего переменную, переменная получает значение
Если обозначаемый переменной объект не имеет значения в рассматриваемом контексте, то используется анонимная переменная.
В VisualProlog анонимные переменные обозначаются символом "_”.
Пример : likes(ivan,_) – ответом будет : Yes
Сложные вопросы и поиск с возвратом:
В сложных вопросах, содержащих конъюнкцию, должны быть доказаны все подцели.
Сначала Prolog пытается доказать первую подцель.
Если в базе данных есть факт, соответствующий первой подцели, то Prolog отмечает найденное место (приписывает маркер) и пытается согласовать следующие подцели.
После согласования (или не согласования) следующих подцелей, Prolog снова возвращается к первой подцели и снова начинает ее согласование с приписанного маркера.
Описанный процесс получил название поиска с возвратом (backtracking).
... ...
Правила:
Под правилами в Prolog понимаются наиболее общие утверждения об объектах и отношениях между ними.
Правила задают новые отношения через уже существующие.
Пролог-правило имеет вид фразовой формы: заключение:-усл1, усл2, … ,услN.
Данное выражение считается основным в Prolog.
Прологоподобные языки считаются языками типа "если-то” : заключение истинно, если истинными являются все условия, перечисленные в правой части.
(Чтобы посмотреть пример - качайте полную версию)
... ...
Декларативная трактовка Prolog- программ:
Декларативное значение программ позволяет установить, является ли заданная цель истинной, а в случае положительного ответа — при каких значениях переменных она является истинной.
Никаких шагов в программе не выполняется.
Для доказательства истинности цели достаточно правильно сформулировать все факты и правила. При этом порядок правил и фактов не важен, так же не важен порядок целей в правилах.
Пролог автоматически, без участия пользователя, доказывает истинность целей. При этом нет необходимости знать, как работает механизм вывода.
Процедурная трактовка Prolog-программ:
При процедурной трактовке Prolog- программы подчеркивается последовательность шагов, которые выполняет интерпретатор при обработке запроса. Здесь имеет значение порядок следования подцелей в правиле.
Множество фраз, имеющих одно и то же имя и одинаковое количество аргументов, можно рассматривать как процедуру, при этом запрос является вызовом процедуры.
Для получения процедурного значения Prolog-программы необходимо знать, как работает механизм вывода.