Логическое программирование и кому оно нужно
Пару месяцев назад мы с вами бегло обсудили функциональное программирование, а теперь пришло время затронуть ещё один тип — логическое программирование. В некоторой литературе эти два типа часто объединяют, противопоставляя императивному, однако основные принципы всё же различны.
Что это
Логическое программирование основывается на выводе информации, являющейся результатом изучения фактов.Образно говоря, это чем-то похоже на процесс обучения ребенка, когда вам чётко надо задать окружающие объекты, которые трогать «нельзя», остальные же изначально помечаются, как «доступные». Получив ваши наставления ребёнок начинает изучать мир и, сопоставляя данные, принимает решения. В логическом программировании этот принцип повторяется практически в точности, но разумеется в чуть более сложной форме.
Самым известным представителем и пожалуй самым популярным из используемых, является язык Prolog.
Prolog
Раз мы заговорили об этом популярном представителе ветви логического программирования, то остановимся на нём немного подробнее. Он был основан в начале 70-х годов 20 века, когда компьютеры только-только стали доступными для широких масс. С точки зрения построения и синтаксиса это не самый простой язык, но с точки зрения понимания ответных действий машины - почти идеальный. Просто взгляните на код, которым можно описать автомобиль:
auto( 'Model', 'Year', 'Engine', Power( 'h.p.', 'kW' ) ).
Согласитесь, такую структуру легко понять и идентифицировать параметры, а ведь это едва ли не самое сложное, что можно увидеть в Prolog.
Изначально именно поэтому ему была уготована больше просветительская участь, чем реально полезная. Но со временем Prolog оказался полезен на передовой — в создании искусственного интеллекта и при работе с базами данных. В свежем рейтинге TIOBE Prolog занял весьма достойное 38 место.
Рассмотрим основные плюсы и минусы этого языка.
Достоинства:
-
Операции, совершаемые в логическом программировании всегда понятны;
-
Результат практически всегда не зависит от выбранного пути реализации;
-
Может быть использован в качестве невычислительного языка используя только выражения и факты.
Недостатки:
-
Если брать за пример логического языка программирования Prolog, то на лицо невозможность создания комплексных задач. То есть в реальности логический язык может идти дополнением к процедурному, но самостоятельно используется крайне редко;
-
Из-за недостатка в инвестициях и простом внимании, логические языки слабо развиваются;
-
Если предстоит иметь дело с вычислительными операциями, то логические языки программирования - не лучший выбор.
Кому изучать
Следуя примеру советских студентов, изучать логическое программирование будет полезно практически всем и в любом возрасте, просто потому, что это здорово развивает умение мыслить поступательно и логически. Плюс, как уже было сказано, если ваша работа так или иначе связана с созданием искусственного интеллекта или хотя бы с данными, то язык Prolog и ему подобные — станут полезным инструментом.
Почитать
Изучение языка, а тем более целого класса языков немыслимо без чтения хороших книг. Вот некоторые из них:
Программирование на языке ПРОЛОГ, Уильям Клоксин - базовый обучающий курс логического и, что важно, практического программирования;
Алгоритмы искусственного интеллекта на языке PROLOG, Иван Братко - занимательная книга, пошагово и достаточно интересно знакомящая читателя с языком Prolog через операции по созданию ИИ;
Problem Solving With Prolog, Джон Стобо - данное творение отличается чуть более углубленной подачей материала, рекомендуется использовать, как 2-3 книгу для изучения Prolog;
The Art Of Prolog: Advanced Programming Techniques, Леон Стерлинг - книга, выпущенная в MIT в далёких 80-х годах, не теряет свою актуальность и сегодня, в основном благодаря большому количеству примеров кода;
From Logic to Logic Programming, Кис Доетс - ещё одно произведение из MIT, но на этот раз про логическое программирование в целом. Уровень подготовки требуется достаточно серьёзный, поэтому подготовьтесь много “гуглить”.
Logic-Based Artificial Intelligence, Джек Минкер - самое старое творение, но при этом одно из самых фундаментальных.