Сегодня почти идеальным языком программирования является C++, которым обеспечивается как высокая эффективность получаемых кодов, так и поддержка структур данных, максимально приближенных к моделируемым программами взаимосвязанным сущностям. C++ легко вписывается в любую систему визуального создания программ. Это обусловлено его объектно-ориентированной природой. С другой стороны, попытайтесь представить ход решения на C++ следующей задачи: рассчитать в заданной электрической схеме сопротивление между заданными точками. Электрическая схема естественно формализуется нумерацией точек соединения контактов и таблицей из трех столбцов, содержащих пары номеров непосредственно соединенных контактов и сопротивления между ними. Используя Пролог, автор решил эту задачу менее чем за час. В программе на C++ фактически пришлось бы реализовывать встроенные механизмы Пролога. Однако, используя Пролог, трудно создать приемлемый пользовательский интерфейс в силу того, что этот язык практически невозможно соединить с концепциями ООП.
Работая с системой наподобие Visual Prolog, ощущаешь, что работаешь на самом деле с двумя хотя и искусстно, но искусственно склеенными частями от разных механизмов. Единственная возможность естественным образом соединить механизмы вывода Пролога с современным интерфейсом пользователя — это создать на C++ класс Prolog, в простейшем случае, имеющий вид:
class Prolog { public: list<string> db; // пролог-программа string goal; // цель list<string> results; // список результатов void find(); // поиск решений };.
Подобный подход позволит как использовать метод поиска решений, встроенный в Пролог, так и использовать средства C++, в частности, для организации ввода-вывода. Предложенный класс Prolog можно значительно усовершенствовать. Например, добавив в закрытую часть класса внутреннее, эффективное для поиска решений представление базы данных. Можно добавить средства для отслеживания работы функции поиска и прочее, и прочее...
Создавая подобный класс, можно использовать неплохие средства GNU Пролога или других реализаций этого языка для связи с программами на C++.