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
Илья Ермаков писал(а):
После написания очередного кода взаимодействия с окружением, с кучей проверок - полуночная мыслишка о конструкции:


Отличная свежая идея. :!: :D :D :D Синтаксис пока сыроват - надо думать и обсуждать.

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

Надо будет включить такую многоветочную конструкцию в PureBuilder, когда синтаксис станет более выверенным.

Такая конструкция достойна нового ключевого слова в заголовке конструкции: это и не ветвление, и не цикл. Использование слова IF только сбивает с толку, так как предполагает исполнение только одной ветки. Предлагаю всем подумать, каким должно быть новое ключевое слово. Мне пока на ум пришли continue и step(s).

Конструкция может присваивать своему параметру номер первой ветви, которую не удалось исполнить. Проверку надо делать и перед первой веткой.

Автор:  Владислав Жаринов [ Среда, 19 Январь, 2011 18:35 ]
Заголовок сообщения:  Re: Конструкция AND THEN?

Сергей Прохоренко писал(а):
...
Такая конструкция достойна нового ключевого слова в заголовке конструкции: это и не ветвление, и не цикл.
А что это?
Не имеет отношения к реальной тематике этой ветки (несколько отклонившейся от её названия :D )? Хотя о расщеплении потоков вроде речь не идёт...

Автор:  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?

Сергей Прохоренко писал(а):
Илья Ермаков писал(а):
После написания очередного кода взаимодействия с окружением, с кучей проверок - полуночная мыслишка о конструкции:

Отличная свежая идея. :!: :D :D :D
Этой свежей идее в обед сто лет :lol:

Автор:  Владислав Жаринов [ Среда, 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 намекает, что это ИЛИ а не И.

Можно заменить на & :lol:
Код:
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
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:
Вложение:
Progress.png
Progress.png [ 14.69 КБ | Просмотров: 14728 ]

Автор:  Владислав Жаринов [ Пятница, 21 Январь, 2011 16:28 ]
Заголовок сообщения:  Re: Обс. конструкции "AND THEN" для Pure Builder

Сергей Прохоренко писал(а):
Вариант 2:
Вложение:
Вложение Progress.png больше недоступно
Это так?
Вложение:
Рисунки А3LS - Конструкция PROGRESS-IF (примитив).png
Рисунки А3LS - Конструкция PROGRESS-IF (примитив).png [ 84.67 КБ | Просмотров: 14721 ]

Автор:  Сергей Прохоренко [ Пятница, 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/