Дружелюбный Русский Алгоритмический язык, Который Обеспечивает Наглядность/Надёжность
Здесь показаны различия между двумя версиями данной страницы.
— |
atomarnye_i_liannye_struktury [2012/04/07 14:48] (текущий) Владислав Жаринов создано |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ====== Атомарные и лианные структуры ====== | ||
+ | |||
+ | Известно, что минимально для представления любой структуры маршрутов достаточно только следования и цикла; менее строго к этому добавляется также ветвление. По ШМ такое представление очевидно выводимо одним вложением соответствующих атомов. Поэтому можно называть получаемые структуры атомарными — такими, что тело схемы всегда можно «без остатка» (и без перекрытия границ подразделений — только с полным вхождением) подразделить на атомы языка этой схемы, а если подразделяется «матрёшка» - то на атомы и охватывающие их кроссы (причём вложенный атом/кросс является нагрузкой вертикали охватывающего). Другие упомянутые выше ШМ-операции атомарности тела схемы не нарушают. | ||
+ | |||
+ | Все теоретически возможные структуры маршрутов не всегда можно получить только вложением. Имеются в виду структуры с БП — произвольным внутри программы (goto) и изнутри цикла на его начало/конец (т.н. break/continue-заменители). Для их представления Паронджановым было введено понятие лианной структуры маршрутов и операция ''пересадки лианы''. В результате в техноязыке возможно представить структуры циклов с заменителями, и сверх того — некоторые случаи goto в разветвлённых алгоритмических структурах (на ближайшие слева/справа вертикали). Как результат пересадок лианы могут возникать связи, нарушающие атомарность тела примитива (ветки силуэта), и их соединения тоже требуют представления явными БП. | ||
+ | |||
+ | В силуэте у ветки возможны и побочные выходы. Они получаются как в результате укладки примитива с пересечениями, так и при изначальном сочинении силуэта. Для создания побочных выходов в ШМ включена операция ''заземления лианы''. | ||
+ | |||
+ | Примерное выполнение этих операций показано на рисунках. | ||
+ | |||
+ | {{ :jazyk:soobschenija_o_jazyke_i_metode_ischislenija_ikon:proekt_statja_-_ocenka_texnojazyka_i_ishm_kak_razvitija_stbs_html_m78d9ffef.gif? |}} | ||
+ | |||
+ | {{ :jazyk:soobschenija_o_jazyke_i_metode_ischislenija_ikon:proekt_statja_-_ocenka_texnojazyka_i_ishm_kak_razvitija_stbs_html_m139b893d.gif? |}} | ||
+ | |||
+ | Очевидное достоинство такого подхода — техноязык практически нейтрален к структурности алгоритмов («войне языков» высокого уровня по поводу goto и заменителей). Если принять подход противников явных БП в ЯВУ — можно отказаться от операций с лианой и алгоритмизовать только атомарными структурами. Если принять подход сторонников — разрешить лианные операции и структуры. | ||
+ | |||
+ | Недостаток разрешения лианных структур — тот же, что в случае силуэтной укладки схемы — необходимость в явных БП для представления соединителей. Аналогично он и преодолевается. | ||
+ | |||
+ | ===== Визуализация логики и "законы джунглей" ===== | ||
+ | |||
+ | Суть различий между атомарными и лианными структурами можно понять, раскрыв смысл конструкций каждого вида. Удобно взять «матрёшку» и результат пересадки лиан в ней (с сохранением частичной эквивалентности как тождества части наборов маршрутов). Возьмём конструкцию, предложенную Паронджановым для визуализации функции «логическое И» (над вопросами развилок, понимаемыми как булевы термы): | ||
+ | |||
+ | {{ :st_drakonsu_-_ocenka_texnojazyka_i_ishm_html_m450f7821.gif? |}} | ||
+ | |||
+ | Для этой цели из возможных звеньев ввода нужно использовать только одно — на главной вертикали конструкции. Именно этот маршрут выбирается по И над вопросами развилок. | ||
+ | |||
+ | Уже из схем кроссов видно главное отличие лианной конструкции — нарушение эквивалентности с «матрёшкой» (здесь — в части побочных маршрутов). С позиций шампур-метода это несущественно — для того и операции с лианой, чтобы вывести то, что не получается вложением... | ||
+ | |||
+ | Другое отличие видно при раскрытии смысла — безусловные переходы, представляющие соединители из «подвала», частично объединяются с переходами, представляющими вершины-разветвители из «шапки». | ||
+ | |||
+ | Заметим, что для понимания смысла нужно вновь привлекать текст. Во-первых, вопросов — каждый вопрос нужно чётко понимать как значение, получаемое при ответе и имеющее смысл переменной булева типа. На это косвенно указывает и Паронджанов — при обсуждении визуализации логики в [[http://drakon.su/biblioteka/start#literatura|"Как улучшить работу ума...", Гл. 9]]. А во-вторых, нужно учитывать и ответы — точнее, их положение при выходах развилки. Можно показать, что от этого зависит интерпретация «шапки» как логического выражения. Мы на этом здесь останавливаться не будем — читатель, достаточно разобравшийся в структурном анализе, может попробовать сделать это сам. | ||
+ | |||
+ | ===== Алгоритмизация и типы мышления: когда мудрец похож на обезьяну? ===== | ||
+ | |||
+ | А что такого в том, чтобы допустить операции с лианой? И почему мы говорим, что «мудрец в этом случае становится похож на обезъяну»? Может, дело в этом описании сочинения лианных структур у Паронджанова: | ||
+ | |||
+ | //Обезьяна, сидевшая на дереве, поймала свисавшую сверху лиану. Однако нижняя часть лианы приросла к стволу и не поддавалась. Обезъяна перегрызла её зубами, уцепилась за конец и мигом перелетела на соседнее дерево, где намертво привязала лиану к ветке. (Как улучшить работу ума..., с. 229)// | ||
+ | |||
+ | Да нет — если бы дело ограничивалось такой аллегорией, это ещё было бы ничего — даже сообщало бы сочинению элемент игры. Что где-то и неплохо... если не заигрываться... ;-) | ||
+ | |||
+ | Тут штука в другом — возможность манипулировать соединителями маршрутов так, что получаются неатомарные структуры, не располагает к построению алгоритмов, скажем так, контролепригодных. Ведь как строится в таком случае алгоритм? Сочинитель выводит какую-то атомарную структуру путём ввода атомов. Формулирует содержание линейных участков (в сущности, различных видов действий) и вопросы для развилок. Проверяет, соответствует ли исполнение этой структуры с таким текстом тому, что нужно для решения задачи. Обычно для этого "прокручивается" процесс исполнения. Мысленно и/или с помощью имитатора-отладчика. | ||
+ | |||
+ | Часто причина несоответствия в том, что в процессе вывода понимание решения уточняется — но это нам сейчас не так важно. Важно другое — что делать сочинителю, если обнаружено несоответствие? Атомарную структуру нужно в чём-то построить заново (в части вывода «слепыша» и/или содержания вершин). При этом обычно нужно рассмотреть схему или крупный блок в целом, со всеми его условиями. А в лианной можно... просто «приклепать» ещё одну или более развилок в тех местах, где «не работает». Пересадить лианы от новых развилок и составить их вопросы так, чтобы «пропатчить» каждую локальную проблему несоответствия. И считать на этом сочинение законченным. Если нужно ещё что-то изменить — снова можно «приклепать» неатомарные маршруты-«заплатки»... Главное — по возможности не трогать уже построенную часть маршрутной логики... | ||
+ | |||
+ | Но. Если вспомнить смысл вопросов — то это ведь отношения над величинами алгоритма. И ответ при исполнении развилки — да или нет — зависит от значений величин, включённых сочинителем в вопрос. Неважно, сформулирован ли он уже в виде логвыра или «качественно». И может оказаться так, что на каком-то сочетании значений сами лианные маршруты станут источником новых проблем исполнения. Ведь они сочинялись во многом отдельно от остальной части схемы (и часто друг от друга — ведь решались каждый раз новые локальные проблемы) — а исполняется-то всё как система... А вот узнать, возможно ли такое, для неатомарной структуры оказывается проблематично. Фактически тут возможен только полный перебор сочетаний значений величин в вопросах развилок. И определение, какие варианты использования для каждого сочетания получаются... | ||
+ | |||
+ | Для атомарных же структур разработаны математические методы вывода нелинейных структур маршрутов. Они принимают во внимание значения величин, включаемых в условия. Поэтому, во-первых, вопросы получаются «сразу правильными» (в пределах знаний сочинителя о задаче). Во-вторых, выводится схема сразу с текстом. | ||
+ | |||
+ | Важно понимать такую вещь. И в атомарных структурах возможны ошибки. По теории вообще не существует «абсолютной правильности» сочинения — можно установить правильность только относительно конкретных требований к решению. Но атомарные структуры естественно выводятся из чётко сформулированных требований — это раз. И наиболее пригодны для проверки на соответствие таким требованиям — это два. | ||
+ | |||
+ | Почему так получается? Дело в том, что лианная структура перестаёт быть регулярной. В некотором смысле возвращаясь к «анархии» блок-схем. И то, что шампур-метод накладывает физические ограничения (запрет пересечений маршрутов, упорядоченность положения выходов вершин-развилок и действий) — не избавляет от логической нерегулярности. Короче, эргономичность формы записи (за счёт замены части текста на графику схем) сочетается с «избыточной сложностью» содержания этой записи (потому что не исключили возможностей произвольно строить структуру). | ||
+ | |||
+ | Фактически аналогия с обезьяной лежит именно здесь — в логике. Конкретно — в типе мышления. На это указывал один из современных специалистов в алгоритмизации и программировании — Ф.В. Ткачёв. Способ, которым выводятся лианные структуры, в его классификации относится к низшему — т.н. //**комбинаторному**// — типу. Человек в этом случае действует аналогично обезьяне в известных экспериментах по изучению мышления приматов — видит «конкретный банан» - тянется к нему, не видит — не тянется (а если охота поесть — двигается, пока в поле зрения банан не попадёт :-))... Не правда ли, похоже на описанный нами процесс «клепания» маршрутов?.. | ||
+ | |||
+ | Высший тип — //**рефлексивный**// — предполагает, что сочинитель критически анализирует возможные варианты и отбрасывает ненужные. При этом «комбинаторность» никуда не девается - просто она управляется рефлексией. И человек может определёнными усилиями и при благоприятных обстоятельствах перейти от первого типа ко второму. Подробнее можно узнать [[http://forum.oberoncore.ru/viewtopic.php?p=64991#p64991|здесь]] (Ткачёв выступает под псевдонимом Info21). | ||
+ | |||
+ | Ну и как же это делается? Удобно будет раскрыть суть структурной алгоритмизации в отдельном разделе. | ||