Prolog — удивительный язык программирования
— Чем же он удивительный? Я знаю пару десятков языков и для меня не проблема изучить еще один новый, я просто уже не вижу необходимости.
Пролог — уникален. Это единственный язык представляющий парадигму декларативного программирования; это язык, который имеет сотни различных имплементаций, но они все равно называются Prolog, добавляя лишь префиксы и суффиксы к названию; это живой язык в котором не происходит никаких существенных изменений более 20 лет; это, наверное, единственный настолько популярный язык программирования, который не имеет применения в реальном программировании. Почему же Prolog?
Пролог — уникален по своей природе, он появился благодаря счастливому совпадению (таинственному устройству мира). Когда-то в 60-х годах очень бурно развивалась теория автоматического доказательства теорем и Робинсоном был предложен алгоритм резолюций, который позволял доказать любую верную теорему (вывести из аксиом) за конечное время (за какое не известно). Как оказалось позже, это наилучшее решение общей задачи, невозможно доказать теорему за ограниченное число операций. Простыми словами, алгоритм представляет собой обход (в общем случае бесконечного) графа в ширину, естественно, что предсказуемость работы алгоритма практически равно 0, соответственно для Языка Программирования — это абсолютно не подходит. И в этот момент Кальмэроу нашел блестящее сужение задачи, благодаря которому доказательство некоторых теорем выглядело как процедурное исполнение программы. Стоит отметить, что класс доказуемых теорем достаточно широк и очень хорошо применим для класса программируемых задач. Вот так в 1972 появился Prolog.
В этой статье я попытаюсь рассказать о Prolog как инструменте решения общих логических задач. Этот топик будет интересен тем, кто уже владеет синтаксисом Prolog и хочет понять его изнутри, а также тем, кто абсолютно не владеет синтаксисом языка, но хочет понять его «изюминку» не тратя лишнее время на изучение синтаксических конструкций.
Главной чертой Prolog является то, что его можно легко читать, но очень тяжело писать, что принципиально отличается от всех mainstream языков, которые так и говорят писать стало еще легче еще один шаг и можно будет писать на планшете, перетягивая рабочие модули как друзей в Google+, от этого все мы знаем очень сильно страдает само качество кода. Вроде бы каждая строчка понятна, но как система работает за гранью понимания даже для разработчиков, как говорится наиндусили. Мне кажется во всех книгах по обучению Prolog, делают одну и ту же ошибку, начиная рассказ о фактах, отношениях, запросах и у человека складывается отношение к языку как к Экспертной Системе или Базе Данных. Гораздо важнее научится правильно читать программы и почитать так с десяток 🙂
Как правильно читать программы на прологе
Читать программы очень просто, так как в языке очень мало специальных символов и ключевых слов и они легко переводятся на естественный язык. Главная ошибка программиста, что он хочет сразу представить как программа работает, а не прочитать, что программа описывает, поэтому мне кажется обучить незатуманенный мозг обычного человека, гораздо проще чем програмиста.
Понятия
В языке существует 2 понятия предикаты (условия) и объекты (они же переменные и термы). Предикаты выражают некоторое условие, например объект зеленый или число простое, естественно что условия имеют входные параметры. Например green_object(Object), prime_number(Number) . Сколько в предикате параметров, такова и арность предиката. Объектами — являются термы, константы и переменные. Константы — это числа и строки, переменные — выражают неизвестный объект, возможно искомый, и обозначаются как строчки с большой буквы. Оставим пока термы и рассмотрим простейшую программу.
Программа
Программа — это набор правил, вида Если условие1 и условие2 и… то верно условие. Формально эти правила объединяются через И, но противоречие получить невозможно, так как в Прологе отсутствует логическое отрицание, а в связке То может присутствовать только один предикат (условие).
A :- B_1, B_2. % правило читается как : Если B_1 и B_2, то A
нечетное_простое(Число) :- простое(Число), нечетное(Число).
% Если «Число» — простое и нечетное, то «Число» — нечетное_простое
Как видно имя переменной имеет область видимости — это правило. Математически верно, правило звучит: для любой переменной — «Число», если оно простое и нечетное, то оно простое_нечетное. Аналогично, можно перефразировать так: Если существует «Число», что оно нечетное и простое, то оно нечетно_простое. Поэтому имя переменной очень важно! Если в левой части (до :- ) заменить Число на Число2, то правило поменяет смысл: Для любого Число2 и Число, если Число — простое и нечетное, то Число2 — простое нечетное. Получается все числа простые_нечетные! Это самая распространенная ошибка в Прологе.
A :- B_1, B_2. % правило читается как : Если B_1 и B_2, то A нечетное_простое(Число) :- простое(Число), нечетное(Число). % Если "Число" - простое и нечетное, то "Число" - нечетное_простое
Пример — совершенные числа
совершенное_число(Ч) :- число(Ч), сумма_делителей_без_числа(Ч, СуммаДелителей), равно(СуммаДелителей, Ч). совершенное_число(1). равно(Объект, Объект). сумма_делителей_без_числа(1, 1). сумма_делителей_без_числа(Число, Сумма) :- число_предыдущее(Число, Предыдущее), сумма_делителей_числа_до_числа(Число, Сумма, Предыдущее). сумма_делителей_числа_до_числа(Число, 1, 1). сумма_делителей_числа_до_числа(Число, Сумма, Делитель) :- делится_на(Число, Делитель), число_предыдущее(Делитель, Предыдущее), сумма_делителей_числа_до_числа(Число, СуммаПред, Предыдущее), сложить(СуммаПред, Делитель, Сумма). сумма_делителей_числа_до_числа(Число, Сумма, Делитель) :- не_делится_на(Число, Делитель), число_предыдущее(Делитель, Предыдущее), сумма_делителей_числа_до_числа(Число, Сумма, Предыдущее).
- Если «Ч» — число и для «Ч» и «СуммаДелителей» выполняется условие сумма_делителей_без_числа, проще говоря СуммаДелителей есть сумма делителей числа «Ч», и «Ч» равно «СуммаДелителей», то «Ч» совершенное число.
- 1 — совершенное число. Правила могут не иметь условий, в этом случае они называются фактами.
- Всякий объект «О» равен «О». В принципе существует, стандартный предикат » tm-article-presenter__meta»>
Преимущества и недостатки использования пролога в программировании
Пролог — это язык программирования, который используется для логического программирования. Он имеет свои преимущества и недостатки при использовании в программировании.
Преимущества
- Логическое программирование: Пролог позволяет описывать программы в терминах логических отношений. Это означает, что вы можете описывать, что должно быть сделано для выполнения программы, а не как это должно быть сделано. Это делает пролог очень легким для написания и понимания.
- Рекурсия: Пролог хорошо подходит для рекурсивных программ. Это связано с тем, что он использует рекурсивные правила для описания программ.
- Унификация: Пролог использует унификацию для сопоставления шаблонов. Это позволяет программисту писать более элегантный код с помощью унификации.
Недостатки
- Низкая эффективность: Программы на Прологе работают медленнее, чем на многих других языках программирования. Это связано с тем, что Пролог использует рекурсивный алгоритм.
- Ограниченная поддержка: Пролог не поддерживается многими средами разработки, что ограничивает его использование.
- Неудобный синтаксис: Синтаксис Пролога может оказаться непривычным для программистов, которые уже знакомы с другими языками программирования, такими как С или С++.
- Сложная отладка: Отладка программ на Прологе может быть сложной, поскольку ошибка может быть связана с тем, как данные связываются между собой.
Заключение
Пролог является мощным языком программирования, который имеет свои преимущества и недостатки. Решение о том, использовать ли Пролог или нет, должно быть основано на требованиях проекта и на опыте программиста.
Бритвина П.В.
ВОЗМОЖНОСТИ ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ НА ЯЗЫКЕ PROLOG
Аннотация:
статья посвящена значимости логического программирования в наше время. Рассмотрен один из самых известных языков программирования в данной сфере, обозначены его достоинства и недостатки
Ключевые слова:
обучение, образование, программирование, информационные технологии, язык программирования, логика
Бритвина П.В.
Северный (Арктический) федеральный университет
ВОЗМОЖНОСТИ ЛОГИЧЕСКОГО
ПРОГРАММИРОВАНИЯ НА ЯЗЫКЕ PROLOG
Аннотация: статья посвящена значимости логического программирования в наше время. Рассмотрен один из самых известных языков программирования в данной сфере, обозначены его достоинства и недостатки.
Ключевые слова: обучение, образование, программирование, информационные технологии, язык программирования, логика.
Принцип логического программирования основывается на выводе информации, которая является результатом изучения фактов. В качестве примера можно привести процесс обучения ребенка, когда родитель должен четко объяснить окружающие объекты, какие трогать «можно», а какие «нельзя». Получив родительские наставления, ребёнок начинает изучать мир и самостоятельно сопоставляет данные для принятия решений. Что касается логического программирования, то этот принцип повторяется в точности как в приведенном примере, но в чуть более сложной форме [2].
Самым известным и популярным представителем из используемых, является язык Prolog. Данный язык программирования был разработан в начале 70-х годов 20 века, в то время компьютеры только-только стали доступными для широких масс. Рассматривая его построение и синтаксис, можно сделать вывод, что это не самый простой язык, но с точки зрения понимания ответных действий машины – почти идеальный [4].
Например, код, в котором описан автомобиль выглядит следующим образом:
auto( ‘Model’, ‘Year’, ‘Engine’, Power( ‘h.p.’, ‘kW’ ) ).
Данную структуру легко понять и идентифицировать параметры, хотя в Prolog это считается едва ли не самым сложным, что можно увидеть.
Изначально именно поэтому ему была уготована больше просветительская участь, чем полезная в действительности. Однако немного позже Prolog стали применять и на передовых направлениях, таких как создание искусственного интеллекта и работа с базами данных [1].
Рассмотрим основные плюсы и минусы этого языка.
- Операции, совершаемые в логическом программировании всегда понятны;
- Результат практически всегда не зависит от выбранного пути реализации;
- Можно использовать в качестве невычислительного языка, используя только выражения и факты.
- Если брать за пример логического языка программирования Prolog, то в данном случае невозможно создать комплексные задачи. То есть в реальности логический язык может идти дополнением к процедурному, но самостоятельно используется крайне редко;
- Из-за недостатка в инвестициях и популярности среди программистов, логические языки слабо развиваются;
- Если рассматривать вычислительные операции, то логические языки программирования – не лучший выбор.
Следуя примеру советских студентов, изучение логического программирования будет полезно практически всем и в любом возрасте, так как это хорошо развивает умение мыслить поступательно и логически. К тому же, если ваша работа так или иначе связана с созданием искусственного интеллекта или хотя бы с данными, то язык Prolog и ему подобные — станут полезным инструментом [3].
СПИСОК ЛИТЕРАТУРЫ:
- «TIOBE Index for February 2023» [Электронный ресурс] — URL: http://www.tiobe.com/tiobe-index/
- «Что такое логическое программирование и зачем оно нам нужно» [Электронный ресурс] — URL: https://habr.com/ru/post/322900/
- «Калькулятор истинности: все о логике для программиста» [Электронный ресурс] — URL: https://otus.ru/journal/kalkulyator-istinnosti-vse-o-logike-dlya-programmista/
- Математическая логика и языки программирования
Номер журнала Вестник науки №2 (59) том 4
Ссылка для цитирования:
Бритвина П.В. ВОЗМОЖНОСТИ ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ НА ЯЗЫКЕ PROLOG // Вестник науки №2 (59) том 4. С. 218 — 220. 2023 г. ISSN 2712-8849 // Электронный ресурс: https://www.вестник-науки.рф/article/7386 (дата обращения: 20.07.2023 г.)
Альтернативная ссылка латинскими символами: vestnik-nauki.com/article/7386
Нашли грубую ошибку (плагиат, фальсифицированные данные или иные нарушения научно-издательской этики) ?
— напишите письмо в редакцию журнала: zhurnal@vestnik-nauki.com