10.6. ПЕРЕХОД ОТ ДАННЫХ К КОНЕЧНОМУ АВТОМАТУ
633
Только что решенная задача, разумеется, является модельной. В реаль-
ной практике подобные по постановке задачи приходится решать в основном
в частных случаях (например, вводится требование игнорирования пересе-
чения слов, вместо подсчета числа вхождений может потребоваться другая
обработка, в частности, для использующей программы). Подобные допол-
нительные условия существенно влияют на выбор подхода, но применение
метода динамически порождаемого автомата — это хорошее решение с мно-
гих точек зрения: высокая эффективность, наглядность, автономность.
Логически подобные задачи возникают в случае предварительного пла-
нирования действий по сложной структуре данных, и они, как правило, еще
сложнее, хотя часто подход к их решению упрощается тем, что требуется
найти приемлемый, а не оптимальный, план действий. Тут такой прием ди-
намического порождения и последующей интерпретации еще более ценен.
Анализ предложенного решения, которое исходит из двухэтапной схемы
(построение автомата и его применение), показывает, что естественный ме-
тод реализации первого этапа — рекурсивный алгоритм, который на концеп-
туальном уровне следует отнести к стилю функционального программирова-
ния. Возможно, что и в качестве языка его реализации вам покажется наибо-
лее подходящим, к примеру,
LISP
. В то же время адекватный стиль реализа-
ции второго этапа — программирование от состояний. Таким образом, разде-
ление стилей требует в идеале применения двуязычной системы программи-
рования. К сожалению, чисто технические трудности сопряжения двух язы-
ков (упомянем только одну из них: согласование представлений данных) ча-
сто приводят к тому, что предпочитают моделирование стиля. И это порою
прагматически обоснованное решение, особенно если систему не придется
развивать дальше. Но если ее придется развивать, лучше один раз преодо-
леть технические трудности
14
, зато затем работать концептуально продуман-
но. Хорошим примером здесь является система
Autocad
, языком для преобра-
зования планов в которой служит расширение языка
LISP
.
14
И занести соответствующие приемы в свою базу технологических решений для исполь-
зования в других подобных ситуациях.