Visual Prolog

Логическое программирование под Windows

Признаюсь честно, рассказать об этом замечательном языке программирования читателям "Компьютерных вестей" я хотел уже давно. Но как-то всё то откладывалось, то забывалось. Однако, как говорится, лучше поздно, чем никогда.


Необычный?..

Вы, конечно же, сразу спросите меня: а чем, собственно говоря, Visual Prolog такой уж необычный? Сейчас, конечно, очень много разных языков и технологий, однако они, в целом, достаточно схожи друг с другом в силу того, что решают, в общем-то, достаточно близкие задачи, а потому и как-то особенно напрягаться для того, чтобы выделиться из общей (я бы даже сказал, серой) массы, нет совершенно никакой необходимости. Но эти слова, к счастью, не относятся к Visual Prolog (да и вообще к "Прологу") - он выделяется на этом фоне очень даже отчетливо.

Дело в то, что Visual Prolog - совершенно особый продукт. С одной стороны, подобно большинству других пакетов для разработки ПО, он включает в себя компилятор, отладчик, интегрированную среду разработки, справку и примеры программ. Но выделяется на общем фоне он не этим. Как вы уже заметили, в названии продукта есть слово Prolog - название языка логического программирования. Что это значит? Для того, чтобы ответить на этот вопрос, нужно немного поговорить о том, что же именно представляет собой логическое программирование - на мой взгляд, одна из интереснейших парадигм программирования, активно используемых в наши дни.


Логическое программирование

Если постараться выразить суть парадигмы логического программирования одним предложением, то оно, скорее всего, будет выглядеть следующим образом: логическое программирование - это концепция, позволяющая описывать предметную область проблемы без составления алгоритма поиска решения. Если вдуматься в то, что именно означают эти слова, становится понятным, что логическое программирование переворачивает с ног на голову представление о программировании как о процессе составления и написания на каком-то формальном языке какого-либо вычислительного алгоритма.

Собственно, на практике эта идея выглядит следующим образом: программист описывает только постановку задачи в виде объектов (не совсем то, что подразумевается под этим термином в объектно-ориентированном программировании, но другими словами охарактеризовать данную сущность достаточно сложно) и отношений между ними, а решением занимается уже язык. Звучит чертовски привлекательно, не правда ли? "По щучьему велению, по моему хотению, ужмись, фильм, сразу в два раза лучше, чем DivX'ом" - и язык программирования сам напишет соответствующий вашим пожеланиям кодек. Впрочем, конечно, не всё так просто.

Дело в том, что даже при таком весьма упрощённом представлении концепции логического программирования становится вполне очевидным, что сложность программирования никуда не исчезает, она просто "перетекает" из области построения алгоритма на машинном языке в область формулировки задачи для решения машиной. Так что, к сожалению, логическое программирование - это совсем не панацея, и благодаря ему программист не сможет уподобиться своему заказчику и ставить перед компьютером задачи вроде "напиши быстро мне классную и дешевую программу".

Исторически первым языком логического программирования был Planner, который так и не получил широкого распространения. Prolog оказался куда удачнее и в результате получил более широкое распространение. В своё время весьма популярной была реализация "Пролога" от Borland, называвшаяся Turbo Prolog. Но те времена миновали безвозвратно, и сегодня на рынке Prolog-решений номером один является как раз Visual Prolog, ради рассказа о котором и была затеяна эта статья. Разработан Visual Prolog компанией Prolog Development Center, и, надо сказать, что эта реализация, как и любая коммерческая реализация языка программирования, довольно сильно отличается от классического академического языка.


Весь такой visual...

Слово Visual в названии обязывает продукт ко многому. Как минимум, он должен соответствовать требованиям времени. Каким таким требованиям? Если говорить о языке программирования, то он должен, для начала, быть объектно-ориентированным, потому что сегодня почти все распространённые языки программирования поддерживают эту парадигму. Во-вторых, он должен быть пригоден к написанию вполне нормальных прикладных программ, в которых будут производиться вызовы каких-то системных функций, обращения к базам данных и прочие востребованные рынком действия. И что бы вы думали? Это всё есть в Visual Prolog! Собственно, именно поэтому выше я и сказал про отличия между этим программным продуктом и тем "Прологом", который был придуман давно тому назад для воплощения в жизнь идей логического программирования.

Что ж, давайте обо всём по порядку. Насчёт объектно-ориентированного программирования, думаю, в целом всё понятно - по утверждениям создателей Visual Prolog, их язык является полностью объектно-ориентированным, но при этом базируется на логическом программировании и сверх того поддерживает алгебраические типы и является строго типизированным (что, в принципе, нормально для компилируемых в машинный код языков). Что сверх этого? Есть поддержка делегатов, параметрического полиморфизма, а также автоматическое управление памятью, которое в компании с остальными особенностями языка должно убрать из программ, создаваемых на нём, столь "любимые" программистами ошибки класса access violation. Впрочем, конечно, это вовсе не гарантирует вам полного их отсутствия.

Что касается особенностей, не относящихся непосредственно к разряду языковых, то это возможность прямой связи с кодом на C/C++, а также вызов Win32 API функций. Базы данных поддерживаются через ODBC, то есть потенциально у вас есть возможность организовать взаимодействие с любой базой данных, если под рукой имеется соответствующий драйвер, но есть и возможность прямого взаимодействия с Oracle.


Пример кода

Для того, чтобы вы лучше представляли себе особенности языка Visual Prolog, я решил включить в статью пример программного кода на нём, нагло позаимствованный мною из "Википедии". Предназначен этот код для решения широко известной задачи "Ханойские башни". Увидеть код примера вы можете в листинге к статье. Поскольку пример достаточно большой, можно легко убедиться в том, что в Visual Prolog объектно-ориентированное программирование присутствует во всей своей красе.

class hanoi
 predicates
 hanoi : (unsigned N).
end class hanoi
 implement hanoi
 domains
 pole = string.
 clauses
 hanoi(N) :- move(N, "left", "centre", "right").
 class predicates
 move : (unsigned N, pole A, pole B, pole C).
 clauses
 move(0, _, _, _) :- !.
 move(N, A, B, C) :-
 move(N-1, A, C, B),
 stdio::writef("move a disc from % pole to the % pole\n", A, C),
 move(N-1, B, A, C).
end implement hanoi
goal
 console::init(),
hanoi::hanoi(4).


Среда разработки

Visual Prolog - это всё-таки современный программный продукт, включающий в себя, кроме компилятора языка, ещё и среду разработки приложений на нём. Вот о ней сейчас я и скажу несколько слов.

Конечно, на первый взгляд может показаться, что среда Visual Prolog безнадёжно устарела и не может конкурировать с той же Visual Studio или с CodeGear RAD Studio. Собственно говоря, определённая доля правды в таком высказывании есть, однако, в общем-то, Visual Prolog и не ставит перед собой задачу конкурировать с этими средами. Для того, чтобы с комфортом писать приложения на Visual Prolog, среда разработки предоставляет всё необходимое.

Первая из возможностей, которые предоставляет IDE, заключается в управлении проектами. Поскольку среда рассчитана на создание достаточно масштабных приложений, то и средства управления файлами в рамках проекта приложения в ней представлены в достаточном для этого объёме. Текстовый редактор среды разработки также поддерживает "кандидатский минимум". Ко всему прочему, в среде есть даже встроенный редактор диалогов, который позволит вам худо-бедно, но всё-таки как-то организовать взаимодействие пользователя с программой при помощи графического интерфейса. Есть в среде и другие инструменты, на которых вряд ли стоит останавливаться подробно - поскольку в процессе работы в ней вы сами их найдёте и изучите, если вам понадобится, так как они все достаточно простые.


Документация

Говоря о каком-то инструменте для программистов, не в последнюю очередь обращаешь внимание на наличие грамотной и информативной документации по нему. Так вот, у Visual Prolog с этим делом полный порядок. На сайте www.visual-prolog.com можно найти, что самое интересное, не только англоязычные материалы, но и небольшую русскоязычную wiki по Visual Prolog, с которой очень удобно начинать изучение этого языка. Ну а если вас интересуют более комплексные вещи, то есть достаточно старая, зато очень толстая книга А. Адаменко "Логическое программирование и Visual Prolog". Найти её в печатном виде сейчас, наверное, будет достаточно сложно, но здесь может выручить Всемирная паутина. В общем, документации по Visual Prolog за все годы его существования накопилось более чем достаточно, и это большой плюс этого языка.


Резюме

Что ж, подводя итоги, можно сказать, что Visual Prolog - очень интересный программный продукт, который может оказаться полезным и для вас. Поэтому имеет смысл потратить немного времени, чтобы ознакомиться с его особенностями и возможностями - это может очень пригодиться в дальнейшем.

Вадим СТАНКЕВИЧ,
dreamdrusch@tut.by

Версия для печатиВерсия для печати

Номер: 

51 за 2009 год

Рубрика: 

Software
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!