Традиционно под программой понимают последовательность операторов (команд, выполняемых компьютером). Этот стиль программирования принято называть императивным. Программируя в императивном стиле, программист должен объяснить компьютеру, как нужно решать задачу.
Противоположный ему стиль программирования — так называемый декларативный стиль, в котором программа представляет собой совокупность утверждений, описывающих фрагмент предметной области или сложившуюся ситуацию. Программируя в декларативном стиле, программист должен описать, что нужно решать.
Соответственно и языки программирования делят на императивные и декларативные .
Императивные языки основаны на фон неймановской модели вычислений компьютера. Решая задачу, императивный программист вначале создает модель в некоторой формальной системе, а затем переписывает решение на императивный язык программирования в терминах компьютера. Но, во-первых, для человека рассуждать в терминах компьютера довольно неестественно. Во-вторых, последний этап этой деятельности (переписывание решения на язык программирования ) по сути дела не имеет отношения к решению исходной задачи. Очень часто императивные программисты даже разделяют работу в соответствии с двумя описанными выше этапами. Одни люди, постановщики задач, придумывают решение задачи, а другие, кодировщики, переводят это решение на язык программирования .
Урок 1. Установка Visual Prolog 5.2 и разработка программы HelloWorld
В основе декларативных языков лежит формализованная человеческая логика. Человек лишь описывает решаемую задачу, а поиском решения занимается императивная система программирования. В итоге получаем значительно большую скорость разработки приложений, значительно меньший размер исходного кода, легкость записи знаний на декларативных языках , более понятные, по сравнению с императивными языками , программы.
Известна классификация языков программирования по их близости либо к машинному языку, либо к естественному человеческому языку. Те, что ближе к компьютеру, относят к языкам низкого уровня, а те, что ближе к человеку, называют языками высокого уровня. В этом смысле декларативные языки можно назвать языками сверхвысокого или наивысшего уровня, поскольку они очень близки к человеческому языку и человеческому мышлению.
К императивным языкам относятся такие языки программирования,как Паскаль , Бейсик, Си и т. д. В отличие от них, Пролог является декларативным языком .
При программировании на Прологе усилия программиста должны быть направлены на описание логической модели фрагмента предметной области решаемой задачи в терминах объектов предметной области , их свойств и отношений между собой, а не деталей программной реализации. Фактически Пролог представляет собой не столько язык для программирования, сколько язык для описания данных и логики их обработки. Программа на Прологе не является таковой в классическом понимании, поскольку не содержит явных управляющих конструкций типа условных операторов, операторов цикла и т. д. Она представляет собой модель фрагмента предметной области , о котором идет речь в задаче. И решение задачи записывается не в терминах компьютера, а в терминах предметной области решаемой задачи, в духе модного сейчас объектно-ориентированного программирования.
Структура программы на ПРОЛОГе
Пролог очень хорошо подходит для описания взаимоотношений между объектами. Поэтому Пролог называют реляционным языком. Причем «реляционность» Пролога значительно более мощная и развитая, чем «реляционность» языков, используемых для обработки баз данных. Часто Пролог используется для создания систем управления базами данных, где применяются очень сложные запросы, которые довольно легко записать на Прологе.
В Прологе очень компактно, по сравнению с императивными языками , описываются многие алгоритмы. По статистике, строка исходного текста программы на языке Пролог соответствует четырнадцати строкам исходного текста программы на императивном языке , решающем ту же задачу. Пролог-программу , как правило, очень легко писать, понимать и отлаживать. Это приводит к тому, что время разработки приложения на языке Пролог во многих случаях на порядок быстрее, чем на императивных языках . В Прологе легко описывать и обрабатывать сложные структуры данных. Проверим эти утверждения на собственном опыте при изучении данного курса.
Прологу присущ ряд механизмов, которыми не обладают традиционные языки программирования: сопоставление с образцом, вывод с поиском и возвратом . Еще одно существенное отличие заключается в том, что для хранения данных в Прологе используются списки, а не массивы. В языке отсутствуют операторы присваивания и безусловного перехода, указатели. Естественным и зачастую единственным методом программирования является рекурсия . Поэтому часто оказывается, что люди, имеющие опыт работы на процедурных языках, медленней осваивают декларативные языки , чем те, кто никогда ранее программированием не занимался, так как Пролог требует иного стиля мышления, отказа от стереотипов императивного программирования.
Мне приходилось обучать Прологу школьников и студентов. Однажды занятие спецкурса по Прологу посетила одна преподавательница информатики. К тому времени у нее был довольно большой опыт программирования (и преподавания) на императивных языках . После окончания занятия она долго не могла прийти в себя. Реакция у нее была примерно следующая: «Я не понимаю, как такое может быть!
Как программа в несколько строк на Прологе может делать то, на что в программе на Паскале понадобится несколько страниц текста?» Несмотря на то, что человеком она была далеко не глупым, она так и не смогла преодолеть «императивную зашоренность» и начать программировать в декларативном стиле. В отличие от нее, студенты и школьники, даже уже имеющие опыт программирования на императивных языках , но еще не «закостеневшие» в этом направлении, довольно легко воспринимали декларативный подход и без труда начинали программировать на Прологе. Так, один из школьников (семиклассник) после пары месяцев изучения Пролога написал на нем приставку к авиационной системе бронирования билетов «Габриель», которая использовалась в новосибирском «Аэрофлоте».
Как язык программирования Пролог очень хорошо, на мой взгляд, подходит для начального обучения программированию, так как он ориентирован на человеческое мышление в отличие от императивных языков , ориентированных на компьютер . Теми, кто только начинает изучать программирование , Пролог легко осваивается. Практически полное отсутствие синтаксических конструкций, таких как ветвления, циклы и т.д. также влияет на скорость освоения языка. Кроме того, программирование на Прологе, как мне кажется, упорядочивает мышление и позволяет человеку, изучающему этот язык программирования , лучше разобраться в своей мыслительной деятельности. Очень часто для того, чтобы запрограммировать решение задачи, программисту (или эксперту в некоторой предметной области ) вначале требуется понять, как он сам решает эту задачу, провести некую формализацию, перевести свои знания из неявных в явные.
Однако, в отличие от некоторых приверженцев Пролога, я не склонен думать, что Пролог — лучший язык всех времен и народов, универсальный » решатель » любой задачи. На наш взгляд, для каждого языка существует свой класс задач, для решения которых он подходит лучше других языков программирования. Соответственно, для решения любой задачи есть оптимальный язык (языки) программирования. Многие задачи,хорошо решаемые императивными языками типа Паскаля и Си , плохо решаются на Прологе, и наоборот. Поэтому совсем даже неплохо, если человек владеет не одним инструментом решения задач, а может воспользоваться наиболее подходящим из имеющихся в его распоряжении. Давайте посмотрим, в каких областях наилучшим образом себя показал Пролог .
Основные области применения Пролога:
- быстрая разработка прототипов прикладных программ;
- автоматический перевод с одного языка на другой;
- создание естественно-языковых интерфейсов для существующих систем;
- символьные вычисления для решения уравнений, дифференцирования и интегрирования;
- проектирование динамических реляционных баз данных;
- экспертные системы и оболочки экспертных систем;
- автоматизированное управление производственными процессами;
- автоматическое доказательство теорем;
- полуавтоматическое составление расписаний;
- системы автоматизированного проектирования, базирующееся на знаниях программное обеспечение;
- организация сервера данных или, точнее, сервера знаний, к которому может обращаться клиентское приложение, написанное на каком-либо языке программирования.
Области, для которых Пролог не предназначен: большой объем арифметических вычислений (обработка аудио, видео и т.д.); написание драйверов.
Изучать Пролог без привязки к конкретной его версии, мне кажется, не совсем целесообразно. Как уже было сказано выше, версий Пролога очень много, и нужно выбрать какую-нибудь одну из них, чтобы привязать к этой версии разбираемые примеры. Мы остановимся на наиболее известной у нас в стране и довольно эффективной версии Пролога — Турбо Прологе. Его начинала разрабатывать фирма Borland International в содружестве с датской компанией Prolog Development Center ( PDC ). Первая версия вышла в 1986 году. Последняя совместная версия имела номер 2.0 и была выпущена в 1988 году.
В 1990 году PDC получила монопольное право на Турбо Пролог и дальше продвигала его под названием PDC Prolog.
В 1992 году вышла версия PDC Prolog 3.31.
В 1996 году, при участии группы питерских программистов, Prolog Development Center выпустила систему Visual Prolog 4.0. В состав среды Visual Prolog были включены инструментальные средства генерации кода, конструирующие управляющую логику, интерфейс визуального программирования и многие другие средства, позволяющие ускорить разработку приложений. Помимо прочих достоинств среды Visual Prolog стоит обратить внимание на возможность использования в идентификаторах символов национального алфавита, в частности, можно употреблять в программах русские имена доменов, предикатов и переменных, что делает программу более понятной и самодокументированной .
Сейчас вышла шестая версия системы Visual Prolog, которая, однако, довольно далеко шагнула в сторону не только от эдинбургской версии Пролога, но даже и от своей пятой версии, которая практически без проблем принимала программы на Турбо Прологе.
Исходя из соображений малого объема, доступности, малой ресурсоемкости, традиций, а также отсутствия всего лишнего, в том числе графической оболочки, остановимся на Турбо Прологе 2.0, хотя, наверное, это выбор довольно спорный. Но наша цель на данный момент — сосредоточиться на самом языке.
Всюду, где это возможно, мы будем изучать Пролог , желательно как можно ближе к «чистому» Прологу. Попытаемся разобраться и с теоретическими основами этого языка. Но, тем не менее, я считаю, что программирование стоит осваивать, имея доступ к компьютеру с установленной на нем конкретной версией изучаемого языка.
Все разбираемые в лекциях примеры будут работоспособны во второй версии Турбо Пролога и выше. В частности, они должны компилироваться в Visual Prolog версий 4–5.2. Как правило, их можно без особых проблем перенести и в другие версии Пролога. При этом, возможно, потребуется легкая модификация. Например, замена конструкции » : — » на » is » и т.д.
Самое существенное отличие Турбо Пролога от эдинбургской версии (так называемого «классического» Пролога) — наличие в нем строгой типизации данных для повышения скорости трансляции и выполнения программ. В начале программы на Турбо Прологе обычно располагаются разделы описаний доменов (типов данных) и предикатов. В Турбо Прологе отсутствует возможность рассматривать правила как данные, т. е. добавлять и удалять их во время работы, сопоставлять имя предиката с переменной. Изменяемой частью программы является внутренняя база данных (их может быть несколько). Во время выполнения программы в нее можно добавлять и из нее можно удалять факты.
В отличие от «классического» Пролога в Турбо Прологе нельзя определять операции . Турбо Пролог является компилируемым, а не интерпретируемым языком. К достоинствам Турбо Пролога относится возможность присоединять к программе на этом языке процедуры, написанные на Паскале, Си , Фортране или ассемблере.
Источник: intuit.ru
Пролог (язык программирования)
Mercury , Prolog ) — язык и система логики предикатов первого порядка .
Основными понятиями в языке Пролог являются факты, правила логического вывода и запросы, позволяющие описывать базы знаний, процедуры логического вывода и принятия решений.
Факты в языке Пролог описываются логическими предикатами с конкретными значениями. Правила в Прологе записываются в форме правил логического вывода с логическими заключениями и списком логических условий.
Особую роль в интерпретаторе Пролога играют конкретные запросы к базам знаний, на которые система логического программирования генерирует ответы «истина» и «ложь». Для обобщенных запросов с переменными в качестве аргументов созданная систем Пролог выводит конкретные данные в подтверждение истинности обобщенных сведений и правил вывода.
Факты в базах знаний на языке Пролог представляют конкретные сведения (знания). Обобщённые сведения и знания в языке Пролог задаются правилами логического вывода (определениями) и наборами таких правил вывода (определений) над конкретными фактами и обобщенными сведениями.
Начало истории языка относится к 1970-м годам. [1] Будучи декларативным языком программирования , Пролог воспринимает в качестве программы некоторое описание задачи или баз знаний, и сам производит логический вывод, а также поиск решения задач, пользуясь механизмом
- 1 Развитие
- 2 Межплатформенность
- 3 Архитектура
- 4 Критика
- 5 Новая перспектива
- 6 Примечания
- 7 Ссылки
- 8 Литература
Развитие [ ]
Интерес к Прологу поднимался и затихал несколько раз, энтузиазм сменялся жёстким неприятием. Наиболее высоко был поднят интерес к языку Пролог, как к языку будущего, во время разработок японской национальной программы компьютеры пятого поколения в 1980-х годах, когда разработчики надеялись, что с помощью Пролога можно будет сформулировать новые принципы, которые приведут к созданию компьютеров более высокого уровня интеллекта.
Язык Пролог в 1980-х годах был включен в ряд советских вузовских и школьных учебников баз знаний и моделей экспертных систем. С этой целью на IBM PC и ряде советских школьных компьютеров были реализованы учебные русскоязычные интерпретаторы Пролога.
В языке Прологе факты описываются в форме логических предикатов с конкретными значениями. Правила вывода описываются логическими предикатами с определением правил логического вывода в виде списка предикатов над базами знаний и процедурами обработки информации.
Межплатформенность [ ]
Пролог реализован практически для всех известных операционных систем и платформ (в том числе для Архитектура [ ]
Критика [ ]
Пролог критикуется в первую очередь за свою недостаточную гибкость, отчего решения на обычных языках программирования (типа Новая перспектива [ ]
Перспектива развития всемирной Сети, известной как проект OWL, основанного на концепции First-Order Logic (FOL) [2] , реализацию которой, в свою очередь, можно рассматривать как значительно более расширенную технику классического Prolog.
Примечания [ ]
- ↑История языка Prolog
- ↑http://www.ruleml.org/fol
Ссылки [ ]
- Международный стандарт ISO для языка Пролог
- tuProlog — основанный на Java облегчнный Пролог
- Русский Пролог — Актор
- Visual Prolog
- Gprolog (GNU Prolog)
- Болгарский Клубничный Пролог
- SWI-пролог
- Искусственный интеллект: стагнация или новая перспектива
Источник: cybernetics.fandom.com
Пролог. Лаб_р Пролог_1 методические указания. Программа на swi prolog
Единственный в мире Музей Смайликов
Самая яркая достопримечательность Крыма
Скачать 82 Kb.
Методические указания по лабораторной работе № 1.
Тема. Простейшая программа на SWI Prolog .
П
Эд
рограмма «Родственники» является примером простой Прологпрограммы. На рис 2. показано трехуровневое генеалогическое дерево.
Создание фактов в Пролог-программе
Родственные отношения можно записать с помощью фактов, соответствующие отношению parent:
parent(‘Пат’,’Джим’).
Расширим эту программу фактами, определяемыми схемой отношения person.
person(‘Джим’,’м’,3).
Теперь мы можем задавать Прологпрограмме вопросы, используя оба отношения.
Вопрос ”Является ли Пат родителем Джима?” на Прологе можно задать следующим образом:
?-parent(‘Пат’,’Джим’).
Пролог-система будет искать в программе факт, совпадающий с вопросом, и, обнаружив такой факт, система выдаст ответ ‘YES’. В случае, когда соответствующий факт не обнаружен, система выдаст ответ ‘NO’.
Вопрос ”Кто отец Элизабет и сколько ему лет?” на Прологе можно задать следующим образом:
?-parent(Х,’ Элизабет’),person(X,’м’, Y).
Вопрос ”Кто отец Элизабет?” на Прологе можно задать следующим образом:
?-parent(Х,’ Элизабет’),person(X,’м’, _).
Пролог-система выдаст ответ:
Приведенные примеры вопросов относятся к программе, состоящей из одних фактов. Для того чтобы сократить и упростить вопросы в Пролог—программах задаются правила.
Вопрос 3 можно упростить, если задать следующее правило:
“X является отцом Y, если X является родителем Y, и X – мужчина.”
На языке Пролог это правило записывается так:
А вопрос 3 записывается следующим образом:
Источник: topuch.com