Визуальный язык ДРАКОН

Дружелюбный Русский Алгоритмический язык, Который Обеспечивает Наглядность/Надёжность

Инструменты пользователя

Инструменты сайта


atomarnye_i_liannye_struktury

Атомарные и лианные структуры

Известно, что минимально для представления любой структуры маршрутов достаточно только следования и цикла; менее строго к этому добавляется также ветвление. По ШМ такое представление очевидно выводимо одним вложением соответствующих атомов. Поэтому можно называть получаемые структуры атомарными — такими, что тело схемы всегда можно «без остатка» (и без перекрытия границ подразделений — только с полным вхождением) подразделить на атомы языка этой схемы, а если подразделяется «матрёшка» - то на атомы и охватывающие их кроссы (причём вложенный атом/кросс является нагрузкой вертикали охватывающего). Другие упомянутые выше ШМ-операции атомарности тела схемы не нарушают.

Все теоретически возможные структуры маршрутов не всегда можно получить только вложением. Имеются в виду структуры с БП — произвольным внутри программы (goto) и изнутри цикла на его начало/конец (т.н. break/continue-заменители). Для их представления Паронджановым было введено понятие лианной структуры маршрутов и операция пересадки лианы. В результате в техноязыке возможно представить структуры циклов с заменителями, и сверх того — некоторые случаи goto в разветвлённых алгоритмических структурах (на ближайшие слева/справа вертикали). Как результат пересадок лианы могут возникать связи, нарушающие атомарность тела примитива (ветки силуэта), и их соединения тоже требуют представления явными БП.

В силуэте у ветки возможны и побочные выходы. Они получаются как в результате укладки примитива с пересечениями, так и при изначальном сочинении силуэта. Для создания побочных выходов в ШМ включена операция заземления лианы.

Примерное выполнение этих операций показано на рисунках.

Очевидное достоинство такого подхода — техноязык практически нейтрален к структурности алгоритмов («войне языков» высокого уровня по поводу goto и заменителей). Если принять подход противников явных БП в ЯВУ — можно отказаться от операций с лианой и алгоритмизовать только атомарными структурами. Если принять подход сторонников — разрешить лианные операции и структуры.

Недостаток разрешения лианных структур — тот же, что в случае силуэтной укладки схемы — необходимость в явных БП для представления соединителей. Аналогично он и преодолевается.

Визуализация логики и "законы джунглей"

Суть различий между атомарными и лианными структурами можно понять, раскрыв смысл конструкций каждого вида. Удобно взять «матрёшку» и результат пересадки лиан в ней (с сохранением частичной эквивалентности как тождества части наборов маршрутов). Возьмём конструкцию, предложенную Паронджановым для визуализации функции «логическое И» (над вопросами развилок, понимаемыми как булевы термы):

Для этой цели из возможных звеньев ввода нужно использовать только одно — на главной вертикали конструкции. Именно этот маршрут выбирается по И над вопросами развилок.

Уже из схем кроссов видно главное отличие лианной конструкции — нарушение эквивалентности с «матрёшкой» (здесь — в части побочных маршрутов). С позиций шампур-метода это несущественно — для того и операции с лианой, чтобы вывести то, что не получается вложением…

Другое отличие видно при раскрытии смысла — безусловные переходы, представляющие соединители из «подвала», частично объединяются с переходами, представляющими вершины-разветвители из «шапки».

Заметим, что для понимания смысла нужно вновь привлекать текст. Во-первых, вопросов — каждый вопрос нужно чётко понимать как значение, получаемое при ответе и имеющее смысл переменной булева типа. На это косвенно указывает и Паронджанов — при обсуждении визуализации логики в "Как улучшить работу ума...", Гл. 9. А во-вторых, нужно учитывать и ответы — точнее, их положение при выходах развилки. Можно показать, что от этого зависит интерпретация «шапки» как логического выражения. Мы на этом здесь останавливаться не будем — читатель, достаточно разобравшийся в структурном анализе, может попробовать сделать это сам.

Алгоритмизация и типы мышления: когда мудрец похож на обезьяну?

А что такого в том, чтобы допустить операции с лианой? И почему мы говорим, что «мудрец в этом случае становится похож на обезъяну»? Может, дело в этом описании сочинения лианных структур у Паронджанова:

Обезьяна, сидевшая на дереве, поймала свисавшую сверху лиану. Однако нижняя часть лианы приросла к стволу и не поддавалась. Обезъяна перегрызла её зубами, уцепилась за конец и мигом перелетела на соседнее дерево, где намертво привязала лиану к ветке. (Как улучшить работу ума…, с. 229)

Да нет — если бы дело ограничивалось такой аллегорией, это ещё было бы ничего — даже сообщало бы сочинению элемент игры. Что где-то и неплохо… если не заигрываться… ;-)

Тут штука в другом — возможность манипулировать соединителями маршрутов так, что получаются неатомарные структуры, не располагает к построению алгоритмов, скажем так, контролепригодных. Ведь как строится в таком случае алгоритм? Сочинитель выводит какую-то атомарную структуру путём ввода атомов. Формулирует содержание линейных участков (в сущности, различных видов действий) и вопросы для развилок. Проверяет, соответствует ли исполнение этой структуры с таким текстом тому, что нужно для решения задачи. Обычно для этого «прокручивается» процесс исполнения. Мысленно и/или с помощью имитатора-отладчика.

Часто причина несоответствия в том, что в процессе вывода понимание решения уточняется — но это нам сейчас не так важно. Важно другое — что делать сочинителю, если обнаружено несоответствие? Атомарную структуру нужно в чём-то построить заново (в части вывода «слепыша» и/или содержания вершин). При этом обычно нужно рассмотреть схему или крупный блок в целом, со всеми его условиями. А в лианной можно… просто «приклепать» ещё одну или более развилок в тех местах, где «не работает». Пересадить лианы от новых развилок и составить их вопросы так, чтобы «пропатчить» каждую локальную проблему несоответствия. И считать на этом сочинение законченным. Если нужно ещё что-то изменить — снова можно «приклепать» неатомарные маршруты-«заплатки»… Главное — по возможности не трогать уже построенную часть маршрутной логики…

Но. Если вспомнить смысл вопросов — то это ведь отношения над величинами алгоритма. И ответ при исполнении развилки — да или нет — зависит от значений величин, включённых сочинителем в вопрос. Неважно, сформулирован ли он уже в виде логвыра или «качественно». И может оказаться так, что на каком-то сочетании значений сами лианные маршруты станут источником новых проблем исполнения. Ведь они сочинялись во многом отдельно от остальной части схемы (и часто друг от друга — ведь решались каждый раз новые локальные проблемы) — а исполняется-то всё как система… А вот узнать, возможно ли такое, для неатомарной структуры оказывается проблематично. Фактически тут возможен только полный перебор сочетаний значений величин в вопросах развилок. И определение, какие варианты использования для каждого сочетания получаются…

Для атомарных же структур разработаны математические методы вывода нелинейных структур маршрутов. Они принимают во внимание значения величин, включаемых в условия. Поэтому, во-первых, вопросы получаются «сразу правильными» (в пределах знаний сочинителя о задаче). Во-вторых, выводится схема сразу с текстом.

Важно понимать такую вещь. И в атомарных структурах возможны ошибки. По теории вообще не существует «абсолютной правильности» сочинения — можно установить правильность только относительно конкретных требований к решению. Но атомарные структуры естественно выводятся из чётко сформулированных требований — это раз. И наиболее пригодны для проверки на соответствие таким требованиям — это два.

Почему так получается? Дело в том, что лианная структура перестаёт быть регулярной. В некотором смысле возвращаясь к «анархии» блок-схем. И то, что шампур-метод накладывает физические ограничения (запрет пересечений маршрутов, упорядоченность положения выходов вершин-развилок и действий) — не избавляет от логической нерегулярности. Короче, эргономичность формы записи (за счёт замены части текста на графику схем) сочетается с «избыточной сложностью» содержания этой записи (потому что не исключили возможностей произвольно строить структуру).

Фактически аналогия с обезьяной лежит именно здесь — в логике. Конкретно — в типе мышления. На это указывал один из современных специалистов в алгоритмизации и программировании — Ф.В. Ткачёв. Способ, которым выводятся лианные структуры, в его классификации относится к низшему — т.н. комбинаторному — типу. Человек в этом случае действует аналогично обезьяне в известных экспериментах по изучению мышления приматов — видит «конкретный банан» - тянется к нему, не видит — не тянется (а если охота поесть — двигается, пока в поле зрения банан не попадёт :-))… Не правда ли, похоже на описанный нами процесс «клепания» маршрутов?..

Высший тип — рефлексивный — предполагает, что сочинитель критически анализирует возможные варианты и отбрасывает ненужные. При этом «комбинаторность» никуда не девается - просто она управляется рефлексией. И человек может определёнными усилиями и при благоприятных обстоятельствах перейти от первого типа ко второму. Подробнее можно узнать здесь (Ткачёв выступает под псевдонимом Info21).

Ну и как же это делается? Удобно будет раскрыть суть структурной алгоритмизации в отдельном разделе.

atomarnye_i_liannye_struktury.txt · Последние изменения: 2012/04/07 14:48 — Владислав Жаринов