Компьютер-Информ || Архив || Рубрики || Поиск || Подписка || Работа || О "КИ" || Карта

ЗАО "Техно-СПб" Системная интеграция

Нетрадиционные информационные технологии

Как я полюбил Prolog

В.Юхтенко, к.т.н., технический директор Пролог-Софт
Тел.: 272-3038, 967-16-08


Первое знакомство
    Году в 1986, если мне не изменяет память, на семинаре ныне покойного А.И.Губинского в Игналине мы сидели на берегу озера и мой коллега, рисуя палочкой на песке, рассказывал мне о том, как он в своей кандидатской диссертации (к тому времени уже успешно защищенной) использовал неведомый для меня язык Пролог. Я довольно скептически относился к тому, что он рассказывал, подвергая всякий раз сомнению, что этот инструмент может быть использован для чего-то конкретного и практически полезного. Странные слова "предикат", "клоз" (или "клауз", до сих пор не знаю, как правильно произносить это по-русски), "переборный механизм" - навевали скуку, и я никак не мог понять, почему не взять любой из тогда известных языков программирования и ясным образом записывать на нем то, что представляется в голове как поведение программы. Какое-то абстрактное ощущение близости рассказанного к концепции порождающих грамматик осталось у меня после этого разговора, и я надолго забыл не только об этом разговоре, но и само слово Пролог. Спустя некоторое время в книгах по искусственному интеллекту я встречал упоминания Пролога как языка для записи решения интеллектуальных задач, но, уже имея устойчивую защитную реакцию на слово Пролог, легко пропускал разделы, где ничего не говорящие мне конструкции языка муссировали отношения "Том любит вино", "Анна любит теннис" и прочее. Я не любил Пролог.

Первый проект
    Года через четыре, когда надо было что-то срочно предпринимать, чтобы не утонуть в начавшейся "переломке", мне удалось найти Заказчика, которому пришлась по душе моя идея построения системы для автоматизированного специфицирования требований к программным системам управления техническими объектами. Проблема формулировалась достаточно прозрачно: проектировщик объекта (скажем, парогенераторной установки) должен в своих терминах рассказать программистам, разрабатывающим систему управления этим объектом, как им управлять - когда включать те или иные клапаны, по каким законам развиваются процессы, что такое аварийные ситуации, как их предотвращать и как из них выходить и т.д. Программисты на основе этого рассказа-описания должны уже в своих терминах построить систему управления и гарантировать, что все работает так, как того пожелал проектировщик-заказчик. Поскольку система специфицирования должна была строиться на компьютерной основе, просматривалась возможность автоматической генерации тест-планов, самих тестов для программной системы, да и генерация текстов программ на любом языке программирования.
    Было понятно, что основой такого описания должен быть какой-то графический язык описания процесса функционирования объекта управления со множеством параметров, должна быть система отладки описаний, генерации текста технического задания на разработку системы управления, понятного проектировщику-заказчику и программисту, под которым они могли бы поставить свои подписи. Это и было определено в качестве первого шага в реализации проекта.
    Подписавшись под таким договором, я, конечно, рисковал так как еще не знал, как это все сделать. Сроки были весьма ограничены - девять месяцев на разработку прототипа с утрясанием всех понятий и способов представлений с моим Заказчиком и еще полгода на "чистую" систему. К тому же исполнителей пока не было, и я был один на один с этим проектом. Вселяло надежду только множество существовавших программных инструментальных систем, в том числе, "шумевших" тогда оболочек экспертных систем. Здесь-то я и столкнулся с серьезными проблемами, вдруг обнаружив, что ничто "высокоуровневое" из языков и инструментальных систем мне помочь не сможет. А низкоуровневое программирование (я имею в виду С, Pascal и прочее) сделает этот проект целью всей моей оставшейся жизни.
    Через месяц после начала проекта я находился в удрученном состоянии. Ни одной строчки кода не было написано, и рука не поднималась начать программирование на любом из известных мне языков - я интуитивно чувствовал здесь верный провал.
    Помог мне случай. Некоторые мои знакомые знали о моей проблеме, и однажды один из них прислал ко мне программиста с предисловием: "Посмотри на его действующий проект. Это может быть интересно".
    Мы встретились за компьютером, и я вдруг ощутил, что нашел то, что искал. Это был достаточно большой проект под DOS с графикой, написанный одним человеком за полгода. Но самое интересное заключалось в том, что этот проект был написан на Turbo Prolog (Borland). Всплывший было неудачный первый контакт быстро отошел на второй план - я видел работающий проект, который был написан, с моей точки зрения, в рекордные сроки всего одним человеком. Я загорелся, переписал себе эту систему программирования и начал ее освоение. Здесь я сначала набил себе шишек. Новые понятия, лежащая в основе Turbo-Prolog'а и работающая по определенным правилам машина вывода, отсутствие прямых конструкций типа if-then-else, do-until и им подобных, отсутствие глобальных переменных сначала сбивали с толку. Механизм перебора (backtracking) и его отсечения (cut), свойство операторов языка иметь значение "true" и "false", встроенная база данных - заняли не одну бессонную ночь.
    Иногда, постигая особенности Пролога, возникали сомнения в том, правильный ли путь я выбрал, не зря ли я трачу время. Но прошел примерно месяц, и все сомнения развеялись. Я знал теперь Пролог, как мне показалось, в деталях. Программируя, я стал "думать" по-прологовски.
    Как выяснилось, "любовь Тома к вину" совсем ни при чем в реальном программировании на Прологе, да и упоминание искусственного интеллекта в связи с Прологом не совсем уместно, разве что как катализатора появления нового языка программирования. Оказалось, что это просто другая парадигма программирования.
    Первый мой учитель по Прологу (тот, кто убедил меня реальным проектом) вошел в команду. Еще двоих программистов мне пришлось уже самому обучать Прологу, терпеливо выслушивая проклятия языку, в котором нет конструкции while-do и глобальных переменных, а есть динамическая база данных, которая должна быть использована для тех же целей.
    Для реализации проекта мне пришлось разработать структурированную базу данных, используя идеи фреймовых баз данных и редактор к ней. Писалось это легко. Здесь как раз и родилась фраза "На Прологе пишешь, как думаешь". Макроязык и макрогенератор, необходимые для генерации выходных текстов, делались играючи. Отладчик описаний процессов, представленных графически, тоже был написан одним из программистов на одном дыхании.
    Через положенные девять месяцев прототип был готов. Графический редактор, формы для ввода данных, генерация замысловатых текстов - все работало. Заказчик получил удовлетворение от увиденного, а мы - хороший опыт программирования на Прологе. Еще через шесть месяцев, взглянув на многие вещи по-новому, переписав весь проект начисто, мы успешно его сдали, а через некоторое время мы "проводили" Заказчика в последний путь - предприятие оказалось раздавленным реальностью.

Как рождаются некоторые продукты
    На одной из лекций по компьютерным методам решения задач я привел студентам постановку задачи численного решения систем уравнений. Эта постановка лежит в основе системы "ПРИЗ", разработкой которой руководил эстонский ученый Тыугу. Задачу часто приводят в книжках, так или иначе связанных с идеями искусственного интеллекта. Вкратце идея заключается в том, что для заданной системы уравнений, связывающей множество переменных, в зависимости от того, значения каких переменных известны, система вычисляет значения остальных переменных. Число решений, естественно, может быть очень большим, как и число вариантов задания известных и неизвестных значений параметров. Такая постановка задачи полезна в численных инженерных расчетах и в экономике. Студентам эта задача тоже хорошо известна: часто расчетные курсовые проекты просчитываются вперед и назад с целью подгонки под правдоподобные результаты расчетов. Использование чужих курсовых проектов на своих исходных данных тоже связано с решением прямых и обратных задач.
    Изложив постановку задачи, я рассказал об алгоритмах ее решения и, поскольку Пролог тоже был в контексте нашего разговора, заметил, что, по-видимому, решение этой задачи элегантно может быть запрограммировано на Прологе. Эта мысль не давала мне покоя, пока я двигался к своему компьютеру после лекции. Сев за компьютер, я решил проверить, насколько это верно. Ночь не прошла даром - к утру у меня была вчерне работающая программа, которую я, приладив нехитрый пользовательский интерфейс, и, поблагодарив судьбу за встречу с Прологом, продемонстрировал в этот же день студентам. В качестве основы я выбрал систему уравнений экономического характера, где использовались около 20 параметров - прибыль, налоги, зарплата, себестоимость и прочее.
    Обнаружив несколько проблем методологического характера, я решил усовершенствовать эту программу, и через месяц у нас уже была ее коммерческая версия (для DOS), которая не только считала, но и строила на экране дерево решения задачи. В случае неуспешного решения, она поясняла, почему тот или иной набор исходных значений является конфликтным, а также выявляла конфликты в результатах, если они были вызваны некорректными исходными данными. Система была снабжена калькулятором, обеспечивала печать и содержала другие сервисные свойства. Некоторое время мы не без успеха продавали эту программу. До сих пор у меня иногда раздаются звонки пользователей, к которым она попала, с вопросом о новой версии этого продукта. Приходится отвечать, что мы эту программу больше не развиваем в коммерческом смысле. Между делом я усовершенствовал эту программу так, что пользователь может задавать свою собственную систему уравнений. Игрушечные отголоски этой программы можно увидеть на сервере http://www.visual-prolog.com/vipexamples/websolve/pdcindex.htm, где пользователь взаимодействует с ней через Интернет.

Visual Prolog написан на самом себе
    Судьба распорядилась так, что мы вступили в кооперацию с фирмой - разработчиком системы Turbo Prolog - датской фирмой Prolog Development Center (PDC). Задача формулировалась достаточно просто - разработка среды программирования для новой версии системы программирования Пролог - системы Visual Prolog. Язык программирования - Visual Prolog. И вновь Пролог продемонстрировал свою мощь - через год мы совместно с нашими деловыми партнерами выпустили первую пробную версию. Теперь эта версия распространяется под названием Visual Prolog v.5.1. В разработке среды программирования принимали участие всего три человека. При этом члены группы переходили под давлением обстоятельств на другие задачи, на их место приходили люди, иногда знавшие Пролог, иногда знавшие о нем лишь понаслышке или те, кто вообще ничего о нем не слышал. Ясность кода позволяла новым программистам входить в проект без особых проблем. А практика требовала развития проекта, что называется, "на лету". Пролог помог здесь и нам, и себе.

Другие проекты
    Можно привести много примеров весьма успешного применения Пролога в проектах, выполненных нашими программистами и программистами других стран.
Сегодня раздался телефонный звонок из Москвы. Позвонил пользователь Visual Prolog и поделился радостью - они сдали в эксплуатацию крупную систему обслуживания абонентов сотовой телефонной сети. Благодарил судьбу за Пролог. Более того, проектом заинтересовались на Западе. Только там не представляют себе, сколько человек разрабатывало этот проект. Не буду раскрывать этого и я.

Заключение
    Когда у меня спрашивают, что такое Пролог, чем он хорош, и каковы его перспективы, я отвечаю: "Это самый технологичный язык программирования! Следующей будет версия 6.0!"
 


       КОМПЬЮТЕР-ИНФОРМ 
          Главная страница || Статьи ╧ 12'1999 || Новости СПб || Новости России || Новости мира

Анкета || Рубрики || Работа || Услуги || Поиск || Архив || Дни рождения
О "КИ" || График выхода || Карта сайта || Подписка

Главная страница

Сайт газеты "Компьютер-Информ" является зарегистрированным электронным СМИ.
Свидетельство Эл ╧ 77-4461 от 2 апреля 2021 г.
Перепечатка материалов без письменного согласия редакции запрещена.
При использовании материалов газеты в Интернет гиперссылка обязательна.

Телефон редакции (812) 118-6666, 118-6555.
Адрес: 196084, СПб, ул. Коли Томчака, д. 9
e-mail:
Для пресс-релизов и новостей