OberonCore https://forum.oberoncore.ru/ |
|
Обс. конструкции "AND THEN" для Pure Builder https://forum.oberoncore.ru/viewtopic.php?f=93&t=3181 |
Страница 1 из 3 |
Автор: | Сергей Прохоренко [ Среда, 19 Январь, 2011 18:28 ] |
Заголовок сообщения: | Обс. конструкции "AND THEN" для Pure Builder |
Выделено: viewtopic.php?p=57987#p57987 Илья Ермаков писал(а): После написания очередного кода взаимодействия с окружением, с кучей проверок - полуночная мыслишка о конструкции: Отличная свежая идея. Синтаксис пока сыроват - надо думать и обсуждать. Такая вложенная конструкция полностью закроет вопросы с continue в циклах, причем без необходимости использования цикла Дейкстры с дублированием кода в его разных ветках. В отличие от continue , эта конструкция может использоваться не только в циклах. Надо будет включить такую многоветочную конструкцию в PureBuilder, когда синтаксис станет более выверенным. Такая конструкция достойна нового ключевого слова в заголовке конструкции: это и не ветвление, и не цикл. Использование слова IF только сбивает с толку, так как предполагает исполнение только одной ветки. Предлагаю всем подумать, каким должно быть новое ключевое слово. Мне пока на ум пришли continue и step(s). Конструкция может присваивать своему параметру номер первой ветви, которую не удалось исполнить. Проверку надо делать и перед первой веткой. |
Автор: | Владислав Жаринов [ Среда, 19 Январь, 2011 18:35 ] |
Заголовок сообщения: | Re: Конструкция AND THEN? |
Сергей Прохоренко писал(а): ... А что это?Такая конструкция достойна нового ключевого слова в заголовке конструкции: это и не ветвление, и не цикл. Не имеет отношения к реальной тематике этой ветки (несколько отклонившейся от её названия )? Хотя о расщеплении потоков вроде речь не идёт... |
Автор: | Alexey Veselovsky [ Среда, 19 Январь, 2011 18:40 ] |
Заголовок сообщения: | Re: Конструкция AND THEN? |
Ключевое слово должно быть TRY Код: TRY
Statements AND IF Cond TRY Statements AND IF Cond TRY Statements FINALLY (* а нужно ли это вообще? ведь можно просто сделать функцией в последнем TRY *) Statements RESTORE Statements END TRY |
Автор: | Geniepro [ Среда, 19 Январь, 2011 18:43 ] |
Заголовок сообщения: | Re: Конструкция AND THEN? |
Сергей Прохоренко писал(а): Илья Ермаков писал(а): После написания очередного кода взаимодействия с окружением, с кучей проверок - полуночная мыслишка о конструкции: Отличная свежая идея. |
Автор: | Владислав Жаринов [ Среда, 19 Январь, 2011 19:09 ] |
Заголовок сообщения: | Re: Конструкция AND THEN? |
Сергей Прохоренко писал(а): ... М.б. И... ДАЛЬШЕ ?
Такая конструкция достойна нового ключевого слова в заголовке конструкции: |
Автор: | Сергей Прохоренко [ Среда, 19 Январь, 2011 19:15 ] |
Заголовок сообщения: | Re: Конструкция AND THEN? |
Alexey Veselovsky писал(а): Ключевое слово должно быть TRY Код: TRY Statements AND IF Cond TRY Statements AND IF Cond TRY Statements FINALLY (* а нужно ли это вообще? ведь можно просто сделать функцией в последнем TRY *) Statements RESTORE Statements END TRY Это шутка (аналогия с исключениями)? Каждая ветка (включая первую) должна начинаться с проверки выполнения условия. Поэтому, мне кажется, слово TRY - неудачное. Непонятно, все условия проверять, или только до первой неудачи. А что означает ключевое слово RESTORE? |
Автор: | Alexey Veselovsky [ Среда, 19 Январь, 2011 19:24 ] |
Заголовок сообщения: | Re: Конструкция AND THEN? |
Сергей Прохоренко писал(а): Это шутка (аналогия с исключениями)? Каждая ветка (включая первую) должна начинаться с проверки выполнения условия. Поэтому, мне кажется, слово TRY - неудачное. Непонятно, все условия проверять, или только до первой неудачи. А что означает ключевое слово RESTORE? Тут везде проверяется условие кроме первого звена (это не ветки! ветка тут ровно одна! , если хочется аналогии проводить со структурами данных, то тут список, а не дерево, следовательно тут звенья а не ветви). Предусловие на первое звено можно проверить посредством обычного объемлющего всю эту конструкцию IF'a. ОК. Я согласен. что AND IF не достаточно для человекочитабельности. Следует заменить на AND THEN IF Cond TRY (и тогда, если УСЛОВИЕ, попробовать). Если бы это был перебор (попробовали это, не получилось, попробовали то), тогда был бы OR а не AND. RESTORE -- вызывается когда одно из звеньев не сработало. |
Автор: | Geniepro [ Среда, 19 Январь, 2011 19:39 ] |
Заголовок сообщения: | Re: Конструкция AND THEN? |
Сергей Прохоренко писал(а): Предлагаю всем подумать, каким должно быть новое ключевое слово.... ... Проверку надо делать и перед первой веткой. Код: WHEN | <cond_1> DO <operator_sequence_1> | <cond_2> DO <operator_sequence_2> ... | <cond_n> DO <operator_sequence_n> | TRUE DO <operator_sequence_if_all_succeed> ELSE <operator_sequence_if_something_failed> END; Сергей Прохоренко писал(а): Конструкция может присваивать своему параметру номер первой ветви, которую не удалось исполнить. Номера "ветвей" задаются явно? Если неявно, то пользы мало от него...
|
Автор: | Alexey Veselovsky [ Среда, 19 Январь, 2011 19:45 ] |
Заголовок сообщения: | Re: Конструкция AND THEN? |
Geniepro писал(а): Код: WHEN | <cond_1> DO <operator_sequence_1> | <cond_2> DO <operator_sequence_2> ... | <cond_n> DO <operator_sequence_n> | TRUE DO <operator_sequence_if_all_succeed> OTHERWISE <operator_sequence_if_something_failed> END; Сергей Прохоренко писал(а): Конструкция может присваивать своему параметру номер первой ветви, которую не удалось исполнить. Номера "ветвей" задаются явно? Если неявно, то пользы мало от него...Народ! Ну нет тут ветвей, вы что? Тут цепочка действий, состоящая из звеньев. Если одно звено порвалось, последующие не исполняются. Опять же, испольование символа '|' как бы по аналогии с WITH и CASE намекает, что это ИЛИ а не И. |
Автор: | Geniepro [ Среда, 19 Январь, 2011 19:48 ] |
Заголовок сообщения: | Re: Конструкция AND THEN? |
Alexey Veselovsky писал(а): Народ! Ну нет тут ветвей, вы что? Тут цепочка действий, состоящая из звеньев. Если одно звено порвалось, последующие не исполняются. Ну я потому и взял слово ветвь в ковычки.Alexey Veselovsky писал(а): Опять же, испольование символа '|' как бы по аналогии с WITH и CASE намекает, что это ИЛИ а не И. Можно заменить на & Код: WHEN
& <cond_1> DO <operator_sequence_1> & <cond_2> DO <operator_sequence_2> ... & <cond_n> DO <operator_sequence_n> & TRUE DO <operator_sequence_if_all_succeed> ELSE <operator_sequence_if_something_failed> END; |
Автор: | Сергей Прохоренко [ Пятница, 21 Январь, 2011 13:29 ] |
Заголовок сообщения: | Re: Конструкция AND THEN? |
Я пришел к следующему результату: Вложение: Progress.png [ 10.61 КБ | Просмотров: 14745 ] |
Автор: | Geniepro [ Пятница, 21 Январь, 2011 13:57 ] |
Заголовок сообщения: | Re: Обс. конструкции "AND THEN" для Pure Builder |
Почему именно progress? Никакой логики... Может, тогда уж вариант sequence? В языке параллельного программирования Occam последовательность операций помещалась в блок SEQ. Цитата: sequence of operations — последовательность операций, технологический процесс
|
Автор: | Geniepro [ Пятница, 21 Январь, 2011 14:01 ] |
Заголовок сообщения: | Re: Конструкция AND THEN? |
Сергей Прохоренко писал(а): При окончательном успехе переменная получает значение 0 Какой ноль? За пределами этого блока эта переменная не должна быть доступна.
|
Автор: | Сергей Прохоренко [ Пятница, 21 Январь, 2011 14:26 ] |
Заголовок сообщения: | Re: Конструкция AND THEN? |
Geniepro писал(а): Почему именно progress? Никакой логики... Может, тогда уж вариант sequence? В языке параллельного программирования Occam последовательность операций помещалась в блок SEQ. Цитата: sequence of operations — последовательность операций, технологический процесс Progress - это не просто последовательность действий, а последовательность успешных действий. Это ведь не русское слово Прогресс, а английское Progress, значение которого несколько иное. Geniepro писал(а): Сергей Прохоренко писал(а): При окончательном успехе переменная получает значение 0 Какой ноль? За пределами этого блока эта переменная не должна быть доступна.Вовсе нет. Это ведь не параметр цикла, а выходная переменная, сигнализирующая, на каком этапе произошел сбой. Потом эта переменная может быть использована в операторе switch/case. Забыл добавить, что нумерация этапов автоматическая. |
Автор: | Geniepro [ Пятница, 21 Январь, 2011 15:05 ] |
Заголовок сообщения: | Re: Обс. конструкции "AND THEN" для Pure Builder |
Хорошо, ещё к вопросу видимости. Переменные, определённые внутри, скажем, блока 1 будут доступны в блоках 2, 3 и т.д.? Будут они доступны в нижележащих условиях? А за пределами всей конструкции progress? |
Автор: | Сергей Прохоренко [ Пятница, 21 Январь, 2011 15:24 ] |
Заголовок сообщения: | Re: Обс. конструкции "AND THEN" для Pure Builder |
Geniepro писал(а): Хорошо, ещё к вопросу видимости. Переменные, определённые внутри, скажем, блока 1 будут доступны в блоках 2, 3 и т.д.? Будут они доступны в нижележащих условиях? А за пределами всей конструкции progress? Никаких ограничений видимости нет - как при линейной последовательности операторов. Что касается номера первого неудачного этапа, то Ваши опасения мне передались - я решил отказаться от этой переменной и полностью переделать конструкцию. Действительно, при любом изменении последовательности этапов пришлось бы вносить изменения всюду, где используется номер первого неудачного этапа. |
Автор: | Сергей Прохоренко [ Пятница, 21 Январь, 2011 15:58 ] |
Заголовок сообщения: | Re: Обс. конструкции "AND THEN" для Pure Builder |
Вариант 2: Вложение:
|
Автор: | Владислав Жаринов [ Пятница, 21 Январь, 2011 16:28 ] |
Заголовок сообщения: | Re: Обс. конструкции "AND THEN" для Pure Builder |
Сергей Прохоренко писал(а): Вариант 2: Это так? Вложение: Вложение Progress.png больше недоступно Вложение:
|
Автор: | Сергей Прохоренко [ Пятница, 21 Январь, 2011 16:46 ] |
Заголовок сообщения: | Re: Обс. конструкции "AND THEN" для Pure Builder |
Драконограф писал(а): Сергей Прохоренко писал(а): Вариант 2: Это так? ...Вложение: Progress.png Не совсем так. У меня первая проверка условия уже перед первым этапом, и далее каждому этапу с некоторым номером предшествует проверка условия с тем же номером. |
Автор: | Владислав Жаринов [ Пятница, 21 Январь, 2011 16:48 ] |
Заголовок сообщения: | Re: Обс. конструкции "AND THEN" для Pure Builder |
Сергей Прохоренко писал(а): Драконограф писал(а): Сергей Прохоренко писал(а): Вариант 2: Это так? ...Вложение: Progress.png Не совсем так. У меня первая проверка условия уже перед первым этапом, и далее каждому этапу с некоторым номером предшествует проверка условия с тем же номером. В принципе, сравнивая с логикой AND-THEN - тут потенциально широко используются вставки в составе ELSE-блоков (т.к. многие действия при неуспехе разных этапов м.б. повторяющимися). |
Страница 1 из 3 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |