Дружелюбный Русский Алгоритмический язык, Который Обеспечивает Наглядность/Надёжность
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия Следующая версия Следующая версия справа и слева | ||
ocenka_texnojazyka_i_shampur-metoda [2012/03/26 14:12] Владислав Жаринов [Дейкстрал: тени исчезают с лианами, а охрана требует пароль] |
ocenka_texnojazyka_i_shampur-metoda [2012/04/05 11:45] Владислав Жаринов [Содержание] |
||
---|---|---|---|
Строка 5: | Строка 5: | ||
//"Задача формализации и унификации множества профессиональных языков с целью обеспечить эффективное взаимопонимание между специалистами любых профессий, включая программистов, является, хоть и важной, но, увы, неразрешимой. Положение в корне меняется, если ограничиться императивными профессиональными знаниями. Именно эту задачу решает язык ДРАКОН. Он построен путём формализации, неклассической структуризации и эргономизации блок-схем алгоритмов и программ, описанных в стандартах ГОСТ 19.701-90 и ISO5807-85."// (Паронджанов В.Д. Как улучшить работу ума, с. 36) | //"Задача формализации и унификации множества профессиональных языков с целью обеспечить эффективное взаимопонимание между специалистами любых профессий, включая программистов, является, хоть и важной, но, увы, неразрешимой. Положение в корне меняется, если ограничиться императивными профессиональными знаниями. Именно эту задачу решает язык ДРАКОН. Он построен путём формализации, неклассической структуризации и эргономизации блок-схем алгоритмов и программ, описанных в стандартах ГОСТ 19.701-90 и ISO5807-85."// (Паронджанов В.Д. Как улучшить работу ума, с. 36) | ||
+ | |||
+ | Как же решалась эта задача? Ключевой была следующая идея. Дракон-схему (граф маршрутов алгоритма) можно вывести путём исчисления над алфавитом подграфов-атомов из аксиомы-заготовки. Атомы образуются из алфавита вершин-[псевдо]операторов и словаря подграфов-макро[псевдо]операторов, представляющих понятия предметной области языка. | ||
+ | |||
+ | Исчисление, разработанное для ДРАКОНа, называется //шампур-методом//. Оно основано на следующих принципах: | ||
+ | |||
+ | * формальной эргономизации лексики — определения состава вершин и их графики с учётом реальных операторов и директив языков программирования; при этом среди вершин выделяются нелинейные, с участием которых образуются подграфы, построенные из знаков алфавита и словаря, даваемые как единицы лексики языка схем. Такой подграф называется //атомом// и всегда имеет один вход и один выход; также даются исходные конфигурации схем - //заготовки// (см. [[jazyk:vizualnyj_sintaksis|Тезисы 1..8, 11..14 шампур-метода]]); | ||
+ | |||
+ | * вложения - схема наращивается вводом атомов; среди рёбер атомов и заготовок выделены такие, что допускают замену на тот или иной атом — т.н. //рёбра ввода//; рёбра указываются вершинами - //точками ввода// (см. [[jazyk:vizualnyj_sintaksis|Тезисы 9..10, 15..25, 36, 37 шампур-метода]]); | ||
+ | |||
+ | * «шампура» - расположения входа и выхода линейной вершины и атома на одной оси, направленной всегда сверху вниз и упорядочения вершин при следовании по вертикали так, что они лежат на одной оси (см. [[jazyk:vizualnyj_sintaksis| Тезисы 2, 6, 8 шампур-метода]]); | ||
+ | |||
+ | * главной/побочной осей — выделения в нелинейной вершине (подграфе) из ряда входов (выходов) //главного// и упорядочения остальных (называемых //побочными//) вправо от него (см. [[jazyk:vizualnyj_sintaksis|Тезисы 7, 8 шампур-метода]]); | ||
+ | |||
+ | * силуэтной укладки - разделения схемы, называемой «силуэтом», на блоки-ветки, в тела которых уложены цепи схемы на плоскости без пересечений; промежуточные выходы веток связываются со входами через особую структуру — петлю силуэта - и вершины-соединители (см. [[jazyk:vizualnyj_sintaksis|Тезис 2 шампур-метода]]); | ||
+ | |||
+ | * лианного вывода — представления неструктурных топологий схем (которые невозможно получить путём вложения) через операции переноса точек соединения без образования пересечений и/или новых входов в ветки силуэта и/или в циклы (любой формы схемы) (см. [[jazyk:vizualnyj_sintaksis|Тезисы 26..29 шампур-метода]]). | ||
+ | |||
+ | В нелинейном подграфе имеется две и более осей следования. | ||
+ | |||
+ | Вход и выход атома представлены рёбрами ввода, между которыми располагается смысловая часть — так сказать, «ядро». Оно м.б. единственной вершиной или также подграфом (для сводимых графов - типа ветвления или цикла). Во втором случае рёбра ввода также м.б. в «ядре» атома. | ||
+ | |||
+ | Шампур-схема, не использующая соединители, называется «примитивом» и в общем случае может содержать пересечения цепей. Силуэт и примитив служат формами организации схемы на плоскости-диосцене, альтернативными в шампур-методе. Силуэтная укладка также даёт возможность структуризации содержания схемы. | ||
+ | |||
+ | При лианном выводе может получиться //**лианный**//, а в силуэте - также и //**адресный**// макроблок (см. [[http://drakon.su/biblioteka/start#literatura|Паронджанов В.Д. Как улучшить работу ума. Алгоритмы без программистов - это очень просто! М.: Дело, 2001. — С. 259-261.]]) Также может получиться и структура, выводимая вложением (Паронджанов называет этот тип макроблока //**структурным**//; можно также //атомарным//). | ||
+ | |||
+ | На базе этих принципов определены правила вывода схем как теорем исчисления из выбранной аксиомы-заготовки в лексике атомов. | ||
+ | |||
+ | Как можно сказать проще? Шампур-метод даёт возможность строить "слепыш" алгоритма так, как мы выводим формулы в булевой алгебре. Только вместо букв - подграфы. И сами формулы имеют вид графов (для ДРАКОНа - схем маршрутов алгоритма). В основе метода — небольшое число базовых принципов: | ||
+ | |||
+ | * вложения — схема наращивается вводом атомов, построенных из знаков алфавита и словаря, в специально указанные (точками ввода) линии заготовок и других атомов; | ||
+ | |||
+ | * шампура — вершины при следовании упорядочиваются по вертикали, так что вход всегда сверху, выход снизу и лежат на одной оси; | ||
+ | |||
+ | * главной/побочных вертикалей — выходы развилок упорядочены друг относительно друга так, что не лежащий на главной вертикали выход (называемый побочным) всегда располагается правее главного; | ||
+ | |||
+ | * силуэта — укладки маршрутов на плоскости в тела веток, промежуточные выходы которых связываются со входами через особую структуру — петлю силуэта - и вершины-соединители. | ||
+ | |||
+ | * операций с лианой — сочинитель также может переносить (с ограничениями) концы побочных маршрутов, чтобы образовать конфигурацию схемы, недостижимую вводом атома, но соответствующую конструкциям управления некоторых прогязыков; перенос возможен и в примитиве. | ||
+ | |||
+ | Лианы можно пересадить и так, что получится то же самое, что можно получить и вводом атома; конечно, это не имеет особого смысла. | ||
Смысл сказанного можно раскрыть через «формулу новизны», как это и принято для официального описания существа изобретений. Напомним, что она имеет вид: «<Предлагаемый сабж> отличается от <такого-то существующего сабжа> тем, что имеет <такие-то новые фичи> и/или <такие-то фичи>, имевшиеся в <существующем сабже>, здесь реализованы с <такими-то отличиями>».;-) | Смысл сказанного можно раскрыть через «формулу новизны», как это и принято для официального описания существа изобретений. Напомним, что она имеет вид: «<Предлагаемый сабж> отличается от <такого-то существующего сабжа> тем, что имеет <такие-то новые фичи> и/или <такие-то фичи>, имевшиеся в <существующем сабже>, здесь реализованы с <такими-то отличиями>».;-) | ||
Строка 114: | Строка 154: | ||
//**Информатический**// уровень возникает как результат информатизации представления о деятельности. При этом выделяется императивное формализованное знание — о маршрутах процесса, декларативное — о типах объектов и их структурах, активностное — о типах операций и средствах их выполнения (как структуре механизмов «реквизита»). В пределе обязательно представление объектов как чисел (кодов) и операций — как арифметических и/или логических (в смысле булевых функций над двоичными цифрами-битами). Любым «материальным последствиям» исполнения алгоритма тогда соответствуют (в алгоритмической обстановке, т.е. в модели контекста процесса) значения чисел/кодов на определённых линиях связи внутри исполнителя (между механизмами «реквизита») и в его окружении в определённые моменты времени. Так можно описать то, что Паронджанов называет «техпроцессом». Понятно, что сочинитель должен представлять себе схему исполнителя вместе с окружением, «размеченную» величинами данного процесса. | //**Информатический**// уровень возникает как результат информатизации представления о деятельности. При этом выделяется императивное формализованное знание — о маршрутах процесса, декларативное — о типах объектов и их структурах, активностное — о типах операций и средствах их выполнения (как структуре механизмов «реквизита»). В пределе обязательно представление объектов как чисел (кодов) и операций — как арифметических и/или логических (в смысле булевых функций над двоичными цифрами-битами). Любым «материальным последствиям» исполнения алгоритма тогда соответствуют (в алгоритмической обстановке, т.е. в модели контекста процесса) значения чисел/кодов на определённых линиях связи внутри исполнителя (между механизмами «реквизита») и в его окружении в определённые моменты времени. Так можно описать то, что Паронджанов называет «техпроцессом». Понятно, что сочинитель должен представлять себе схему исполнителя вместе с окружением, «размеченную» величинами данного процесса. | ||
- | ===== Вершины и линии схем: смысл — в ГРАФике И Тексте ===== | ||
- | По идее когнитивной формализации знаний, в ШМ она должна прежде всего удобно вмещать текст (и/или таблицы, если они допустимы как содержание вершины некоторого типа). Поэтому из БС-графики заимствуются только такие формы икон и их частей, которые и наглядны сами по себе, и удобно и экономично вмещают текст. | + | Таков пролог нашей истории... :) |
+ | |||
+ | ===== Вершины и линии схем: смысл — в ГРАФике И Тексте ===== | ||
+ | По идее когнитивной формализации знаний, в ШМ графика должна прежде всего удобно вмещать текст (и/или таблицы, если они допустимы как содержание вершины некоторого типа). Поэтому из БС-графики заимствуются только такие формы икон и их частей, которые и наглядны сами по себе, и удобно и экономично вмещают текст. | ||
Как следствие, по сравнению с блок-схемами некоторые формы блоков получают новые значения (к примеру, форма-трапеция – как основа хронизаторов реального времени), а другие (скажем, ромб) не используются. | Как следствие, по сравнению с блок-схемами некоторые формы блоков получают новые значения (к примеру, форма-трапеция – как основа хронизаторов реального времени), а другие (скажем, ромб) не используются. | ||
Строка 137: | Строка 179: | ||
Далее рассмотрим дракон-алфавит с позиций структурного анализа и синтеза. | Далее рассмотрим дракон-алфавит с позиций структурного анализа и синтеза. | ||
+ | |||
==== Начало азбуки ДРАКОНа-1: вроде, как в БС... да не как в БС ==== | ==== Начало азбуки ДРАКОНа-1: вроде, как в БС... да не как в БС ==== | ||
Строка 320: | Строка 363: | ||
Конечно, содержание вершин и/или линий не всегда нужно учитывать. Поэтому дальше мы будем использовать и абстрактные схемы («слепыши»). | Конечно, содержание вершин и/или линий не всегда нужно учитывать. Поэтому дальше мы будем использовать и абстрактные схемы («слепыши»). | ||
- | Итак, мы кое-что знаем о визуализации разветвляющихся и циклических конструкций алгоритмов. А какие конструкции нужно строить? По теории алгоритмов, любой алгопроцесс можно построить из структур следования (цепочек вершин типа действия) и циклов. Менее строго можно допустить ветвления. Такое предпочтение циклам не случайно и в плане сложности описания. В самом деле, можно сказать что «цикл — это способ записать меньше, чем на самом деле будет сделано» (написали в теле одну цепочку команд — а выполнится она столько раз, сколько нужно). Тогда как «ветвление — способ записать больше, чем будет сделано» (написали и такую цепочку, и такую — а выполнится каждый раз только одна). | + | Итак, мы кое-что знаем о визуализации разветвляющихся и циклических конструкций алгоритмов. А какие конструкции нужно строить? По теории алгоритмов, любой алгопроцесс можно построить из структур следования (цепочек вершин типа действия) и циклов. Менее строго можно допустить ветвления. На сей счёт была доказана т.н. теорема Б<о|ё>ма-Джакопини. Интересующиеся могут найти её в[[http://www.ozon.ru/context/detail/id/3056680/|этой книге]] (как можно видеть, мы для примера применили РБНФ к «обыденному») тексту — чтобы указать на разночтение имени одного из соавторов :-)). |
+ | |||
+ | Такое предпочтение циклам не случайно и в плане сложности описания. В самом деле, можно сказать что «цикл — это способ записать меньше, чем на самом деле будет сделано» (написали в теле одну цепочку команд — а выполнится она столько раз, сколько нужно). Тогда как «ветвление — способ записать больше, чем будет сделано» (написали и такую цепочку, и такую — а выполнится каждый раз только одна). | ||
И как же строятся схемы? Шампур-метод устанавливает правила на этот счёт — одни более строгие, другие менее. Начнём с более строгих — которые составляют основу метода и при некотором «графитном» понимании задачи сочинителем достаточны для вывода схем. | И как же строятся схемы? Шампур-метод устанавливает правила на этот счёт — одни более строгие, другие менее. Начнём с более строгих — которые составляют основу метода и при некотором «графитном» понимании задачи сочинителем достаточны для вывода схем. | ||
Строка 549: | Строка 594: | ||
===== Атомарные и лианные структуры: когда мудрец похож на обезьяну? ===== | ===== Атомарные и лианные структуры: когда мудрец похож на обезьяну? ===== | ||
- | Известно, что минимально для представления любой структуры маршрутов достаточно только следования и цикла; менее строго к этому добавляется также ветвление. По ШМ такое представление очевидно выводимо одним вложением соответствующих атомов. Поэтому можно называть получаемые структуры атомарными — такими, что тело схемы всегда можно «без остатка» подразделить на атомы языка этой схемы (и без перекрытия границ подразделений — только с полным вхождением, если подразделяется «матрёшка»). Другие упомянутые выше ШМ-операции атомарности тела схемы не нарушают. | + | Известно, что минимально для представления любой структуры маршрутов достаточно только следования и цикла; менее строго к этому добавляется также ветвление. По ШМ такое представление очевидно выводимо одним вложением соответствующих атомов. Поэтому можно называть получаемые структуры атомарными — такими, что тело схемы всегда можно «без остатка» (и без перекрытия границ подразделений — только с полным вхождением) подразделить на атомы языка этой схемы, а если подразделяется «матрёшка» - то на атомы и охватывающие их кроссы (причём вложенный атом/кросс является нагрузкой вертикали охватывающего). Другие упомянутые выше ШМ-операции атомарности тела схемы не нарушают. |
Все теоретически возможные структуры маршрутов не всегда можно получить только вложением. Имеются в виду структуры с БП — произвольным внутри программы (goto) и изнутри цикла на его начало/конец (т.н. break/continue-заменители). Для их представления Паронджановым было введено понятие лианной структуры маршрутов и операция ''пересадки лианы''. В результате в техноязыке возможно представить структуры циклов с заменителями, и сверх того — некоторые случаи goto в разветвлённых алгоритмических структурах (на ближайшие слева/справа вертикали). Как результат пересадок лианы могут возникать связи, нарушающие атомарность тела примитива (ветки силуэта), и их соединения тоже требуют представления явными БП. | Все теоретически возможные структуры маршрутов не всегда можно получить только вложением. Имеются в виду структуры с БП — произвольным внутри программы (goto) и изнутри цикла на его начало/конец (т.н. break/continue-заменители). Для их представления Паронджановым было введено понятие лианной структуры маршрутов и операция ''пересадки лианы''. В результате в техноязыке возможно представить структуры циклов с заменителями, и сверх того — некоторые случаи goto в разветвлённых алгоритмических структурах (на ближайшие слева/справа вертикали). Как результат пересадок лианы могут возникать связи, нарушающие атомарность тела примитива (ветки силуэта), и их соединения тоже требуют представления явными БП. | ||
Строка 564: | Строка 609: | ||
Недостаток разрешения лианных структур — тот же, что в случае силуэтной укладки схемы — необходимость в явных БП для представления соединителей. Аналогично он и преодолевается. | Недостаток разрешения лианных структур — тот же, что в случае силуэтной укладки схемы — необходимость в явных БП для представления соединителей. Аналогично он и преодолевается. | ||
+ | |||
+ | Суть различий между атомарными и лианными структурами можно понять, раскрыв смысл конструкций каждого вида. Удобно взять «матрёшку» и результат пересадки лиан в ней (с сохранением частичной эквивалентности как тождества части наборов маршрутов). Возьмём конструкцию, предложенную Паронджановым для визуализации функции «логическое И» (над вопросами развилок, понимаемыми как булевы термы): | ||
+ | |||
+ | {{ :st_drakonsu_-_ocenka_texnojazyka_i_ishm_html_m450f7821.gif? |}} | ||
+ | |||
+ | Для этой цели из возможных звеньев ввода нужно использовать только одно — на главной вертикали конструкции. Именно этот маршрут выбирается по И над вопросами развилок. | ||
+ | |||
+ | Уже из схем кроссов видно главное отличие лианной конструкции — нарушение эквивалентности с «матрёшкой» (здесь — в части побочных маршрутов). С позиций шампур-метода это несущественно — для того и операции с лианой, чтобы вывести то, что не получается вложением... | ||
+ | |||
+ | Другое отличие видно при раскрытии смысла — безусловные переходы, представляющие соединители из «подвала», частично объединяются с переходами, представляющими вершины-разветвители из «шапки». | ||
+ | |||
+ | Заметим, что для понимания смысла нужно вновь привлекать текст. Во-первых, вопросов — каждый вопрос нужно чётко понимать как значение, получаемое при ответе и имеющее смысл переменной булева типа. На это косвенно указывает и Паронджанов — при обсуждении визуализации логики в [[http://drakon.su/biblioteka/start#literatura|"Как улучшить работу ума...", Гл. 9]]. А во-вторых, нужно учитывать и ответы — точнее, их положение при выходах развилки. Можно показать, что от этого зависит интерпретация «шапки» как логического выражения. Мы на этом здесь останавливаться не будем — читатель, достаточно разобравшийся в структурном анализе, может попробовать сделать это сам. | ||
А что такого в том, чтобы допустить операции с лианой? И почему мы говорим, что «мудрец в этом случае становится похож на обезъяну»? Может, дело в этом описании сочинения лианных структур у Паронджанова: | А что такого в том, чтобы допустить операции с лианой? И почему мы говорим, что «мудрец в этом случае становится похож на обезъяну»? Может, дело в этом описании сочинения лианных структур у Паронджанова: | ||
Строка 615: | Строка 672: | ||
Заметим, что любая величина может входить более чем в одно условие выбора Дейкстры, а интересующее нас подмножество значений у каких-то величин м.б. пустым (т.е. нет таких значений, при которых не была бы истинной хотя бы одна из охран выбора). | Заметим, что любая величина может входить более чем в одно условие выбора Дейкстры, а интересующее нас подмножество значений у каких-то величин м.б. пустым (т.е. нет таких значений, при которых не была бы истинной хотя бы одна из охран выбора). | ||
- | Мысль вторая — при произвольном содержании охран может получиться так, что более чем одна из них будет истинной (т.е. «пароль» как конкретный набор значений охранных величин подходит к двум и более ветвям). Это вытекает из структуры выражения охраны, как мы сказали в начале раздела. А рабочая точка у нас одна — и надо иметь правило выбора для таких случаев. Принято правило т.н. «//**ленивых**//» вычислений — исполнитель предъявляет пароль охранам последовательно, и выбирается первый встретившийся вариант, охрана которого истинна при данном пароле. На этом следование по «шапке» выбора Дейкстры прекращается. Нетрудно видеть, что порядок проверки паролей (вычисления охранных логвыров) задаёт «слепыш» конструкции. | + | Мысль вторая — при произвольном содержании охран может получиться так, что более чем одна из них будет истинной (т.е. «пароль» как конкретный набор значений охранных величин подходит к двум и более ветвям). Это вытекает из структуры выражения охраны, как мы сказали в начале раздела. А рабочая точка у нас одна — и надо иметь правило выбора для таких случаев. Принято правило т.н. «//**ленивых**//» вычислений — исполнитель предъявляет пароль охранам последовательно, и выбирается первый встретившийся вариант, охрана которого истинна при данном пароле. На этом следование по «шапке» выбора Дейкстры прекращается. Нетрудно видеть, что порядок проверки паролей (вычисления охранных логвыров) задаёт «слепыш» конструкции. |
+ | |||
+ | Ленивые вычисления предполагают связывание охран посредством т.н. //**полустрогих**// булевых операций. В такой операции порядок операндов зависит от их значений и смысла согласно цели вычисления. Базовыми являются операции and then и or else (подробнее см. [[http://forum.oberoncore.ru/viewtopic.php?p=69127#p69127|у Мейера в Гл. 5]]). | ||
Третья мысль связана уже с кодированием выбора. Полный смысл кода включает контакты для каждого входа и выхода ветви. Для двумерной организации некоторые контакты м.б. лишними — они показаны другим типом пунктира. А вот если иметь в виду, что код в пространстве исполнителя располагается одномерно -то нужно иметь возможность «выложить» все ветви в одну линию (возможно, с разрывами). И некоторые или все эти контакты нужно будет реализовать (как команды БП). | Третья мысль связана уже с кодированием выбора. Полный смысл кода включает контакты для каждого входа и выхода ветви. Для двумерной организации некоторые контакты м.б. лишними — они показаны другим типом пунктира. А вот если иметь в виду, что код в пространстве исполнителя располагается одномерно -то нужно иметь возможность «выложить» все ветви в одну линию (возможно, с разрывами). И некоторые или все эти контакты нужно будет реализовать (как команды БП). | ||
+ | |||
+ | Ну и нетрудно увидеть, что в случае единственной охраны выбор Дейкстры превращается в развилку (обычную). А выводится он вложением развилки в побочную вертикаль развилки предыдущего уровня вложенности. При этом, хотя по шампур-методу можно продолжать ввод атомов выше и/или ниже вложенной развилки — но в данном случае этого делать не следует. Потому что тогда получится уже не выбор Дейкстры. Поэтому же не следует в охранных выражениях включать вычисления величин, используемых в действиях алгоритма — это эквивалентно тому, что перед развилкой находятся виопы ''Действие'' с этими вычислениями. | ||
Выбор Дейкстры в своё время был сформулирован в текстовом виде как т.н. конструкция ''IF-FI''; та форма, в которой мы записали текст, известна в англоязычном варианте как ''IF{-EL[S]IF}-END''. Разработчиками ряда текстовых ЯВУ был определён частный случай выбора по константам— т.н. ''CASE[-ELSE]-END''-конструкция. Именно она естественно изображается в техноязыке как дракон-переключатель. Дракон-развилка есть частный случай выбора Дейкстры по единственному условию. Поэтому и выбор Дейкстры можно записать (в тех языках где нет такой конструкции) как вложение обычных операторов ''ЕСЛИ-ТО[-ИНАЧЕ]-ВСЁ'' (также вплотную — т.е. не д.б. операторов ни между ''ВСЁ'', ни между концом предыдущей ''ТО''-ветви и текущим ''ЕСЛИ''). | Выбор Дейкстры в своё время был сформулирован в текстовом виде как т.н. конструкция ''IF-FI''; та форма, в которой мы записали текст, известна в англоязычном варианте как ''IF{-EL[S]IF}-END''. Разработчиками ряда текстовых ЯВУ был определён частный случай выбора по константам— т.н. ''CASE[-ELSE]-END''-конструкция. Именно она естественно изображается в техноязыке как дракон-переключатель. Дракон-развилка есть частный случай выбора Дейкстры по единственному условию. Поэтому и выбор Дейкстры можно записать (в тех языках где нет такой конструкции) как вложение обычных операторов ''ЕСЛИ-ТО[-ИНАЧЕ]-ВСЁ'' (также вплотную — т.е. не д.б. операторов ни между ''ВСЁ'', ни между концом предыдущей ''ТО''-ветви и текущим ''ЕСЛИ''). | ||
- | Ну и нетрудно увидеть, что в случае единственной охраны выбор Дейкстры превращается в развилку (обычную). А выводится он вложением развилки в побочную вертикаль развилки предыдущего уровня вложенности. При этом, хотя по шампур-методу можно продолжать ввод атомов выше и/или ниже вложенной развилки — но в данном случае этого делать не следует. Потому что тогда получится уже не выбор Дейкстры. Поэтому же не следует в охранных выражениях включать вычисления величин, используемых в действиях алгоритма — это эквивалентно тому, что перед развилкой находятся виопы ''Действие'' с этими вычислениями. | + | Существует определённая аналогия между полустрогими операциями и конструкциями типа выбора Дейкстры с возможностью действий между развилками. Однако имеется и различие — в полустрогой операции второй операнд-охрана м.б. не определён (и это есть основание для их применения) — тогда как в конструкциях типа ''AND-THEN'' и ''OR-ELSE'' каждая охрана д.б. определена (вычислима). Просто неистинность охраны означает, что предыдущие действия неудачны (в смысле цели всей конструкции) и нужно выбирать не продолжение целевых действий, а парирование неудачи. |
Сказанное означает следующее требование к техноязыку как средству структурной алгоритмизации: //__дракон-лексика должна включать атом выбора Дейкстры как отдельный элемент словаря, а правила — добавление/удаление варианта выбора__//. Этот атом определяется как переключатель с раскрытием соединителей (в верхней гребёнке). Разница с «матрёшкой» развилок — в запрете ввода атома в рёбра «шапки» и «подвала» - т.е. там же, где и в переключателе. | Сказанное означает следующее требование к техноязыку как средству структурной алгоритмизации: //__дракон-лексика должна включать атом выбора Дейкстры как отдельный элемент словаря, а правила — добавление/удаление варианта выбора__//. Этот атом определяется как переключатель с раскрытием соединителей (в верхней гребёнке). Разница с «матрёшкой» развилок — в запрете ввода атома в рёбра «шапки» и «подвала» - т.е. там же, где и в переключателе. | ||
Строка 680: | Строка 741: | ||
Текстовая запись дейкстрала возможна различным образом — в зависимости от конструкций Дейкстры, поддерживаемых текстовым ЯВУ. Если имеется только выбор Дейкстры — текст показан вверху. Кстати, здесь уточнено, что ЦД можно получить вложением выбора Дейкстры в цикл LOOP. Поскольку и этот цикл можно получить из других (об этом мы уже говорили) — то ЦД (как и дейкстрал) в принципе можно написать на любом императивном языке. | Текстовая запись дейкстрала возможна различным образом — в зависимости от конструкций Дейкстры, поддерживаемых текстовым ЯВУ. Если имеется только выбор Дейкстры — текст показан вверху. Кстати, здесь уточнено, что ЦД можно получить вложением выбора Дейкстры в цикл LOOP. Поскольку и этот цикл можно получить из других (об этом мы уже говорили) — то ЦД (как и дейкстрал) в принципе можно написать на любом императивном языке. | ||
+ | |||
+ | А если в языке имеется ЦД — то можно просто вложить его запись в конструкцию описания алгоритма (программы). Как показано на нижнем варианте текста. Разумеется, «впритык» - т.е. перед и после ЦД ничего не д.б. вставлено. | ||
+ | |||
+ | ИНАЧЕ-ветвь ЦД присутствует только в обычном дейкстрале: при её отсутствии алгоритм «зацикливается». Кстати, мы показали выход из ЦД неструктурно, как «спагетти» - не на конец этой же конструкции, а в другую точку (здесь — ниже выхода). Чтобы это исправить, достаточно изменить ключевое слово ''КОНЕЦ'' на ''КЦ''. | ||
Это можно видеть на схемах ниже. | Это можно видеть на схемах ниже. |