Вот узнал, что существует такой логический язык программирования. Объясните пожалуйста для чего он вообще нужен? Используется ли вообще?
Вид для печати
Вот узнал, что существует такой логический язык программирования. Объясните пожалуйста для чего он вообще нужен? Используется ли вообще?
Пролог (фр. Programmation en Logique) — язык и система логического программирования, основанные на языке предикатов математической логики дизъюнктов Хорна, представляющей собой подмножество логики предикатов первого порядка.
Основными понятиями в языке Пролог являются факты, правила логического вывода и запросы, позволяющие описывать базы знаний, процедуры логического вывода и принятия решений.
Факты в языке Пролог описываются логическими предикатами с конкретными значениями. Правила в Прологе записываются в форме правил логического вывода с логическими заключениями и списком логических условий.
Особую роль в интерпретаторе Пролога играют конкретные запросы к базам знаний, на которые система логического программирования генерирует ответы «истина» и «ложь». Для обобщённых запросов с переменными в качестве аргументов созданная система Пролог выводит конкретные данные в подтверждение истинности обобщённых сведений и правил вывода.
Факты в базах знаний на языке Пролог представляют конкретные сведения (знания). Обобщённые сведения и знания в языке Пролог задаются правилами логического вывода (определениями) и наборами таких правил вывода (определений) над конкретными фактами и обобщёнными сведениями.
Начало истории языка относится к 1970-м годам.[1] Будучи декларативным языком программирования, Пролог воспринимает в качестве программы некоторое описание задачи или баз знаний и сам производит логический вывод, а также поиск решения задач, пользуясь механизмом поиска с возвратом и унификацией.
Содержание [убрать]
1 Развитие
2 Кроссплатформенность
3 Архитектура
4 Правила и факты
5 Критика
6 Новая перспектива
7 Пример
8 Примечания
9 Литература
10 Ссылки
[править]Развитие
Интерес к Прологу поднимался и затихал несколько раз, энтузиазм сменялся жёстким неприятием. Наиболее высоко был поднят интерес к языку Пролог, как к языку будущего, во время разработок японской национальной программы компьютеры пятого поколения в 1980-х годах, когда разработчики надеялись, что с помощью Пролога можно будет сформулировать новые принципы, которые приведут к созданию компьютеров более высокого уровня интеллекта.
Язык Пролог в 1980-х годах был включен в ряд советских вузовских и школьных учебников информатики для изучения элементов математической логики, принципов логического программирования и проектирования баз знаний и моделей экспертных систем. С этой целью на IBM PC и ряде советских школьных компьютеров были реализованы учебные русскоязычные интерпретаторы Пролога.
В языке Пролог факты описываются в форме логических предикатов с конкретными значениями. Правила вывода описываются логическими предикатами с определением правил логического вывода в виде списка предикатов над базами знаний и процедурами обработки информации.
В настоящее время Пролог, несмотря на неоднократные пессимистические прогнозы, продолжает развиваться в разных странах и вбирает в себя новые технологии и концепции, а также парадигмы императивного программирования. В частности, одно из направлений развития языка (в том числе и в России) реализует концепцию интеллектуальных агентов.
[править]Кроссплатформенность
Пролог реализован практически для всех известных операционных систем и платформ (в том числе для Java и .NET). В число операционных систем входят OS для мэйнфреймов, всё семейство Unix, Windows, OS для мобильных платформ.
[править]Архитектура
Многие современные реализации языка имеют внутреннее расширение за счет ООП-архитектуры. Кроме проприетарных решений также существуют свободные реализации Пролог. Важно, что для языка существует стандарт ISO, принятый как ISO/IEC JTC1/SC22/WG17.
Базовым принципом языка является равнозначность представления программы и данных (декларативность), отчего утверждения языка одновременно являются и записями, подобными записям в базе данных, и правилами, несущими в себе способы их обработки. Сочетание этих качеств приводит к тому, что по мере работы системы Пролога знания (и данные и правила) накапливаются. Поэтому Пролог-системы считают естественной средой для накопления базы знаний и обучения студентов и школьников принципам логического программирования.
[править]Правила и факты
Программа на Прологе описывает отношения, определяемые с помощью предложений. В чистом Прологе предложения ограничиваются Дизъюнктами Хорна
Заголовок :- Тело.
и читаются как: Заголовок ИСТИНА, если Тело ИСТИНА. Тело правила содержит ссылки на предикаты, которые называются целями правила. Встроенные предикаты ,/2, означающий оператор с двумя аргументами, определяющий конъюнкцию целей и ;/2 определяющий дизъюнкцию. Предложения с пустым Телом называются Фактами. Пример факта:
Кот(Иван).
оно эквивалентно правилу:
Кот(Иван) :- ИСТИНА.
[править]Критика
Пролог критикуется в первую очередь за свою недостаточную гибкость[источник не указан 348 дней], отчего решения на «обычных» языках программирования (например, C++, Java) в сочетании с базами данных оказываются более технологичными, чем аналогичные решения на Прологе. Негибкость заключается в трудности изучения языка, более высоких требований к квалификации программиста на Прологе, трудности отладки программы, неразвитости технологии программирования, плохой контролируемости промежуточных результатов[источник не указан 348 дней].
[править]Новая перспектива
Перспектива развития всемирной Сети, известной как проект Веб 3.0 поддерживает особый интерес к семантике распределенных данных и их обработке декларативными методами. В связи с этим появились концепции языка OWL, основанного на концепции First-Order Logic (FOL)[2], реализацию которой, в свою очередь, можно рассматривать как значительно более расширенную[источник не указан 276 дней] технику классического Prolog.
[править]Пример
Вычисление наибольшего общего делителя нескольких чисел:[3][4]
% Как запускать.
%
% Проверено с GNU Prolog 1.3.1
%
% # gplc --no-top-level gcd.pro
% # ./gcd 22 33 44 121
% Первое число, второе число, НОД
% Верно то, что НОД (A, 0) = A
gcd2(A, 0, A).
% Верно то, что НОД(A, B) = G,
% когда A>0, B>0 и НОД(B, A % B) = G (% - остаток от деления)
gcd2(A, B, G) :- A>0, B>0, N is mod(A, B), gcd2(B, N, G).
gcdn(A, [], A).
gcdn(A, [B|Bs], G) :- gcd2(A, B, N), gcdn(N, Bs, G).
gcdn([A|As], G) :- gcdn(A, As, G).
:- initialization(main).
str2int([], []).
str2int([S|St], [N|Nt]) :- number_atom(N, S), str2int(St, Nt).
main :-
argument_list(Args),
str2int(Args, Numbers),
gcdn(Numbers, G),
write(G), nl.
[править]Примечания
↑ История языка Prolog
↑ FOL RuleML: The First-Order Logic Web Language
↑ Игорь Пашев - Наибольший общий делитель на Прологе
↑ НОД на Прологе
[править]Литература
Иван Братко. Алгоритмы искусственного интеллекта на языке PROLOG = Prolog Programming For Artificial Intelligence. — М.: Вильямс, 2004. — 640 с. — ISBN 0-201-40375-7
Анатолий Адаменко, Андрей Кучуков Логическое программирование и Visual Prolog (с CD).. — СПб.: «БХВ-Петербург», 2003. — С. 990. — ISBN 5-94157-156-9
[править]Ссылки
TuProlog в Викиверситете?
Progopedia:Prolog
Международный стандарт ISO для языка Пролог
tuProlog — основанный на Java облегчённый Пролог
Русский Пролог — Актор
Visual Prolog
Gprolog (GNU Prolog)
Болгарский Клубничный Пролог
SWI-пролог
Спасибо.это видел.
я имел в виду где он сейчас используется?
я так понял в очень-очень узких кругах