Язык программирования Пролог — это декларативный язык программирования, в котором программная логика отображается в терминологии отношений, представленной в форме правил и фактов.
Логическое программирование
Пролог является языком логического программирования. Логическое программирование, подобно функциональному программированию, кардинально отклонилось от базового направления развития программных языков. Логическое программирование построено не на очерёдности абстракций и преобразований, определяемых машинной архитектурой фон Неймана и соответствующей ей совокупности операций, а на базе абстрактной модели, никак не связанной с конкретным видом компьютерного оборудования.
Сдай на права пока
учишься в ВУЗе
Вся теория в удобном приложении. Выбери инструктора и начни заниматься!
Логическое программирование основано на предположении, что нужно не людей приучать мыслить в терминологиях компьютерных операций, а компьютеры обязаны исполнять команды и инструкции, понятные людям. В идеале логическое программирование должно предполагать, что набор инструкций даже не задаётся, а вместо него, в формате логических аксиом, должна быть сформулирована информация о задаче, а также совокупность предположений, достаточных для её решения.
Пролог — попытка объяснить без программирования
Данный набор аксиом может считаться аналогом обычных программ. Такая программа может исполняться при формировании задачи, которая формализована как логическое утверждение, требующее доказательства. Данное утверждение принято обозначать термином «целевое утверждение». Исполнение программы заключается в попытке решения задачи, то есть в попытке доказательства целевого утверждения, с использованием предположений, заданных в логической программе.
Логическим программированием является подход к информатике, в котором языком программирования высокого уровня является логика предикатов первого порядка в формате фраз Хорна. Логикой предикатов первого порядка является универсальный абстрактный язык, который предназначен для отображения знаний и для решения задач. Он может рассматриваться как общая теория отношений.
Логическое программирования в качестве основания использует подмножество логики предикатов первого порядка. Оно позволяет программистам выполнять описание ситуации при посредстве формул логики предикатов, а далее, для формирования выводов из данных формул, использовать автоматический задачный решатель. Когда применяется язык логического программирования, главное внимание следует уделять описанию структуры поставленной задачи, а не разработке указаний компьютеру, какие операции ему нужно выполнить.
«Язык программирования Пролог»
Готовые курсовые работы и рефераты
Решение учебных вопросов в 2 клика
Помощь в написании учебной работы
Язык программирования Пролог
Язык Пролог был разработан в Марселе (Франция) в начале семидесятых годов прошлого века. Наименование языка Prolog расшифровывается как Programming in logic, то есть логическое программирование.
Что за язык программирования Пролог такой? Душкин объяснит
Все языки программирования предназначены для определенного круга проблем, где их применение является наиболее эффективным. Для Пролога это проблемы и задачи, сопряжённые с проектированием систем искусственного интеллекта, таких как:
- экспертные системы,
- переводчики,
- интеллектуальные игры.
Он применяется для работы с естественным языком и имеет мощные средства, позволяющие получать информационные данные из баз данных. При этом, применяемые в Прологе способы информационного поиска, обладают принципиальными отличиями от традиционных методов.
Пролог используется и некоторых иных областях, к примеру, при разрешении проблем реализации сложных расписаний. Причём он не считается универсальным программным языком и не предназначается, к примеру, для разрешения задач, сопряжённых с графической обработкой или численными методиками.
Пролог также находит применение в разных системах, но, как правило, не как основной язык, а как язык для формирования определённого фрагмента системы. Например, он может быть использован для формирования функций, определяющих взаимодействие с базами данных.
Пролог применяется при проектировании расширенных поисковых систем, то есть систем, не просто выполняющих поиск требуемого текста, но и исполняют роль некой «отвечающей системы». То есть, программного комплекса, способного извлекать информационные знания из значительной совокупности текстовых файлов, а далее организовать диалог с пользователем, где формируются ответы на заданные по теме вопросы.
Кроме того, Пролог применяется при проектировании новых специальных языков программирования. К примеру, функциональный язык Erland реализован на базе языка Пролог. По существу, Erland может считаться модификацией Пролога для отдельных специальных задач, которые связаны с задачами в реальном времени.
Есть много программных приложений в таких сферах, как экспертные системы, составление планов, обучение в машинном формате, игровой «искусственный интеллект», которые выполнены именно на базе языка Пролог.
Синтаксис языка Пролог, как и других языков программирования, несколько модифицируется с течением времени и выпуском новых версий. Есть множество версий языка Пролог, в том числе со свободным распространением, а также коммерческих. Целью создания языка Пролог являлось предоставление возможностей назначения спецификаций решения и разрешения компьютеру сформировать из них очерёдность исполнения для данного решения, а не назначение алгоритма решения задачи, как в других языках программирования.
Язык Пролог является интерпретатором, приглашающим пользователя задавать ему информацию. Пользователь формирует запрос или наименование функции, а выводится значение данного запроса, то есть, если «истина», то yes, а если «ложь», то no. Кроме того, выводятся допустимые значения переменных, имеющихся в запросе, задание которых может сделать запрос истинным. Это унификация запроса.
Когда задаётся символ «;», тогда выполняется отображение следующего набора значений переменных, которые унифицируют запрос, и так продолжается до момента исчерпания всей совокупности допустимых подстановок. Далее программа Пролог выводит сообщение no и ожидает очередной запрос.
Источник: spravochnick.ru
Глава 1. Введение в пролог
1. Декларативные и процедурные языки программирования
Процедурные (ИМПЕРАТИВНЫЕ) языки программирования требуют полного описания последовательности шагов (команд), которые нужно предпринять, чтобы решить задачу . К ним относятся СИ, ПАСКАЛЬ, АССЕМБЛЕР.
ПРОЛОГ — язык ДЕКЛАРАТИВНЫЙ. Он базируется на естественных для человека логических принципах. Нужно уметь составить формальное описание задачи, используя понятия объектов различных типов и отношений между ними. Иными словами, нужно описать все ФАКТЫ (ИСТИННЫЕ УТВЕРЖДЕНИЯ) и ПРАВИЛА (позволяющие ВЫВЕСТИ из уже имеющихся истинных утверждений новые), описывающие данную ситуацию. Затем пользователь задает вопрос или, пользуясь терминологией Пролога, задает ЦЕЛЬ.
Далее Пролог пытается ДОКАЗАТЬ заданную цель, то есть вывести ее логическим путем из уже имеющихся фактов и правил. Этот логический вывод осуществляют ВСТРОЕННЫЕ УНИФИКАЦИОННЫЕ ПРОЦЕДУРЫ путем перебора имеющихся утверждений и попыток сопоставить их с доказываемой целью. В Прологе отсутствуют явные управляющие структуры типа IF. THEN.
ELSE. нет детального описания последовательности шагов. Все это — дело внутренних процедур. Иногда Пролог считают не языком программирования, а пользовательской оболочкой, позволяющей формулировать запросы к базе данных, записанной в Пролог — программе.
В связи с этим при использовании Пролога возникают две проблемы:
— эффективность программы (так как осуществляется перебор большого числа следствий из имеющихся правил);
— предсказуемость поведения программы (так как механизм логического вывода не программируется пошагово, а является скрытым внутренним механизмом).
Язык Turbo Prolog фирмы Borland является компромиссом между ПРОЛОГОМ в чистом виде и эффективным компилируемым языком. При грамотном программировании можно добиться большой эффективности выполнения. Особенно хорош Turbo Prolog для создания:
— систем управления динамическими базами данных;
— программ с естественно-языковым интерфейсом.
2. Пролог и логика предикатов. Внешние цели
Логические взаимосвязи между фактами и объектами в логических языках описываются с помощью обозначений, унаследованных из логики предикатов. Синтаксически все объекты данных и отношения представляют собой ТЕРМЫ.
«Мэри любит яблоки»
Два объекта «Мэри» и «яблоки» связаны отношением «любит».
Отношение, связывающее объекты, называется ПРЕДИКАТОМ.
Предикат «любит» связывает объекты «Мэри» и «яблоки»:
любит (Мэри, яблоки). % Факт
и «любит», и «яблоки», и «любит (Мэри, яблоки)» — все это термы.
«Бет любит то же самое, что и Мэри»
Используем местоимение «это», которое может обозначать любое имя существительное. «Это» — переменная, которая может принять ряд конкретных значений.
«Бет любит это, если Мэри любит это.»
Условная часть: «если Мэри любит это».
Следствие: «Бет любит это».
Если условие истинно, то истинно и следствие.
любит (Бет, это):- % Правило
любит (Мэри, это).
Простые объекты могут быть двух типов:
— конкретные объекты или КОНСТАНТЫ (Мэри,Бет,-1,0.21);
— ПЕРЕМЕННЫЕ (это).
По правилам Пролога константы пишутся со строчной буквы, переменные — с прописной (мери, бет, X,Y).
Все известные нам соотношения можно переписать так:
likes(mary,apples).
Это практически готовая Пролог — программа.
Можно подвести итог:
Пролог — программы состоят из утверждений.
Факт является утверждением, безусловно, истинным.
Правило — утверждение, истинное при некоторых условиях.
Условная часть правила называется ТЕЛОМ, следствие (или часть вывода) — ГОЛОВОЙ правила. Если тело правила состоит из нескольких условий, они могут быть связаны конъюнкцией (логическим «И»), обозначающейся запятой «,»:
любит (джон, X):-
любит (мэри,X), % конъюнкция двух условий
любит (энн, X).
или дизъюнкцией (логическое «ИЛИ»), обозначающейся точкой с запятой «;».
Кроме того, от предикатов разрешатся брать отрицание:
Not (likes (mary, oranges)). % Мэри не любит апельсины.
ЗАПРОС или ЦЕЛЬ также является утверждением Пролог — программы.
Если ФАКТ — ПРАВИЛО С ПУСТЫМ ТЕЛОМ, ТО ЦЕЛЬ (ЗАПРОС или формулировка задачи, которую нужно решить) — ПРАВИЛО, ИМЕЮЩЕЕ ТОЛЬКО ТЕЛО.
Турбо-Пролог использует как внутренние цели, которые содержатся в программе, так и внешние. Если внутри программы не содержится цель, то система после запуска программы выдает приглашение Goal:, и пользователь вводит цель с клавиатуры. После удовлетворения внешней цели выполнение программы не завершается. Система просит ввести следующую внешнюю цель. Прекратить запросы можно, нажав при выдаче очередного приглашения ESC.
Ответ системы на запрос представляет собой множество объектов, которые удовлетворяют запросу.
Это означает, что, в ответ на внешний запрос система находит все возможные наборы значений для переменных, содержащихся в запросе.
Источник: studfile.net
Введение в язык логического программирования Пролог
Аннотация: История возникновения и развития Пролога. Японский проект ЭВМ пятого поколения. Императивные и декларативные языки программирования. Области использования Пролога. Пролог — язык начального обучения программированию.
Преимущества и недостатки языка Пролог.
На протяжении многих тысячелетий человечество занимается накоплением, обработкой и передачей знаний. Для этих целей непрерывно изобретаются новые средства и совершенствуются старые: речь, письменность, почта , телеграф, телефон и т. д. Большую роль в технологии обработки знаний сыграло появление компьютеров.
В октябре 1981 года Японское министерство международной торговли и промышленности объявило о создании исследовательской организации — Института по разработке методов создания компьютеров нового поколения (Institute for New Generation Computer Technology Research Center ). Целью данного проекта было создание систем обработки информации, базирующихся на знаниях. Предполагалось, что эти системы будут обеспечивать простоту управления за счет возможности общения с пользователями при помощи естественного языка. Эти системы должны были самообучаться, использовать накапливаемые в памяти знания для решения различного рода задач, предоставлять пользователям экспертные консультации, причем от пользователя не требовалось быть специалистом в информатике. Предполагалось, что человек сможет использовать ЭВМ пятого поколения так же легко, как любые бытовые электроприборы типа телевизора, магнитофона и пылесоса. Вскоре вслед за японским стартовали американский и европейский проекты.
Появление таких систем могло бы изменить технологии за счет использования баз знаний и экспертных систем. Основная суть качественного перехода к пятому поколению ЭВМ заключалась в переходе от обработки данных к обработке знаний. Японцы надеялись, что им удастся не подстраивать мышление человека под принципы функционирования компьютеров, а приблизить работу компьютера к тому, как мыслит человек, отойдя при этом от фон неймановской архитектуры компьютеров. В 1991 году предполагалось создать первый прототип компьютеров пятого поколения.
Теперь уже понятно, что поставленные цели в полной мере так и не были достигнуты, однако этот проект послужил импульсом к развитию нового витка исследований в области искусственного интеллекта и вызвал взрыв интереса к логическому программированию. Так как для эффективной реализации традиционная фон неймановская архитектура не подходила, были созданы специализированные компьютеры логического программирования PSI и PIM .
В качестве основной методологии разработки программных средств для проекта ЭВМ пятого поколения было избрано логическое программирование , ярким представителем которого является язык Пролог . Думается, что и в настоящее время Пролог остается наиболее популярным языком искусственного интеллекта в Японии и Европе (в США, традиционно, более распространен другой язык искусственного интеллекта —язык функционального программирования Лисп ).
Название языка «Пролог» происходит от слов ЛОГическое ПРОграммирование (PROgrammation en LOGique во французском варианте и PROgramming in LOGic — в английском).
Пролог основывается на таком разделе математической логики, как исчисление предикатов . Точнее, его базис составляет процедура доказательства теорем методом резолюции для хорновских дизъюнктов . Этой теме будет посвящена следующая лекция.
В истории возникновения и развития языка Пролог можно выделить следующие этапы.
В 1965 году в работе «A machine oriented logic based on the resolution principle», опубликованной в 12 номере журнала » Journal of the ACM «, Дж Робинсон представил метод автоматического поиска доказательства теорем в исчислении предикатов первого порядка, получивший название » принцип резолюции «. Эту работу можно прочитать в переводе: Робинсон Дж. Машинно-ориентированная логика, основанная на принципе резолюции // Кибернетический сборник. — Вып. 7 (1970). На самом деле, идея данного метода была предложена Эрбраном в 1931 году, когда еще не было компьютеров (Herbrand, «Une methode de demonstration «, These, Paris, 1931). Робинсон модифицировал этот метод так, что он стал пригоден для автоматического, компьютерного использования, и, кроме того, разработал эффективный алгоритм унификации, составляющий базис его метода.
В 1973 году » группа искусственного интеллекта» во главе с Аланом Колмероэ создала в Марсельском университете программу, предназначенную для доказательства теорем. Эта программа использовалась при построении систем обработки текстов на естественном языке. Программа доказательства теорем получила название Prolog (от Programmation en Logique). Она и послужила прообразом Пролога.
Ходят легенды, что автором этого названия была жена Алана Колмероэ. Программа была написана на Фортране и работала довольно медленно.
Большое значение для развития логического программирования имела работа Роберта Ковальского » Логика предикатов как язык программирования » (Kowalski R. Predicate Logic as Programming Language . IFIP Congress, 1974), в которой он показал, что для того чтобы добиться эффективности, нужно ограничиться использованием множества хорновских дизъюнктов . Кстати, известно, что Ковальский и Колмероэ работали вместе в течение одного лета.
В 1976 г. Ковальский вместе с его коллегой Маартеном ван Эмденом предложил два подхода к прочтению текстов логических программ: процедурный и декларативный. Об этих подходах речь пойдет в третьей лекции.
В 1977 году в Эдинбурге Уоррен и Перейра создали очень эффективный компилятор языка Пролог для ЭВМ DEC–10, который послужил прототипом для многих последующих реализаций Пролога. Что интересно, компилятор был написан на самом Прологе. Эта реализация Пролога, известная как «эдинбургская версия», фактически стала первым и единственным стандартом языка.
Алгоритм , использованный при его реализации, послужил прототипом для многих последующих реализаций языка. Как правило, если современная Пролог -система и не поддерживает эдинбургский Пролог , то в ее состав входит подсистема, переводящая прологовскую программу в «эдинбургский» вид. Имеется, конечно, стандарт ISO/IEC 13211– 1:1995, но его поддерживают далеко не все Прологсистемы.
В 1980 году Кларк и Маккейб в Великобритании разработали версию Пролога для персональных ЭВМ.
В 1981 году стартовал вышеупомянутый проект Института по разработке методов создания компьютеров нового поколения.
На сегодня существует довольно много реализаций Пролога. Наиболее известные из них следующие: BinProlog, AMZI-Prolog, Arity Prolog, CProlog, Micro Prolog, МПролог, Prolog-2, Quintus Prolog, SICTUS Prolog, Silogic Knowledge Workbench , Strawberry Prolog, SWI Prolog, UNSW Prolog и т. д.
В нашей стране были разработаны такие версии Пролога как Пролог -Д (Сергей Григорьев), Акторный Пролог (Алексей Морозов), а также Флэнг (А Манцивода, Вячеслав Петухин).
Стерлинг и Шапиро в книге «Искусство программирования на языке Пролог » пишут: «Зрелость языка означает, что он больше не является доопределяемой и уточняемой научной концепцией, а становится реальным объектом со всеми присущими ему пороками и добродетелями. Настало время признать, что хотя Пролог и не достиг высоких целей логического программирования, но, тем не менее, является мощным, продуктивным и практически пригодным формализмом программирования».
Источник: intuit.ru