OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 18 Октябрь, 2019 11:26

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 43 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Обс. конструкции "AND THEN" для Pure Builder
СообщениеДобавлено: Среда, 19 Январь, 2011 18:28 
Аватара пользователя

Зарегистрирован: Воскресенье, 08 Июль, 2007 00:38
Сообщения: 778
Откуда: Москва
Выделено: viewtopic.php?p=57987#p57987
Илья Ермаков писал(а):
После написания очередного кода взаимодействия с окружением, с кучей проверок - полуночная мыслишка о конструкции:


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

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

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

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

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


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

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


Последний раз редактировалось Владислав Жаринов Среда, 19 Январь, 2011 19:08, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Конструкция AND THEN?
СообщениеДобавлено: Среда, 19 Январь, 2011 18:40 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Ключевое слово должно быть TRY :-)
Код:
TRY
   Statements
AND IF Cond TRY
   Statements
AND IF Cond TRY
   Statements
FINALLY (* а нужно ли это вообще? ведь можно просто сделать функцией в последнем TRY *)
   Statements
RESTORE
   Statements
END TRY


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Конструкция AND THEN?
СообщениеДобавлено: Среда, 19 Январь, 2011 18:43 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Сергей Прохоренко писал(а):
Илья Ермаков писал(а):
После написания очередного кода взаимодействия с окружением, с кучей проверок - полуночная мыслишка о конструкции:

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Конструкция AND THEN?
СообщениеДобавлено: Среда, 19 Январь, 2011 19:09 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 2046
Сергей Прохоренко писал(а):
...
Такая конструкция достойна нового ключевого слова в заголовке конструкции:
М.б. И... ДАЛЬШЕ ? :)


Последний раз редактировалось Владислав Жаринов Среда, 19 Январь, 2011 19:23, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Конструкция AND THEN?
СообщениеДобавлено: Среда, 19 Январь, 2011 19:15 
Аватара пользователя

Зарегистрирован: Воскресенье, 08 Июль, 2007 00:38
Сообщения: 778
Откуда: Москва
Alexey Veselovsky писал(а):
Ключевое слово должно быть TRY :-)
Код:
TRY
   Statements
AND IF Cond TRY
   Statements
AND IF Cond TRY
   Statements
FINALLY (* а нужно ли это вообще? ведь можно просто сделать функцией в последнем TRY *)
   Statements
RESTORE
   Statements
END TRY


Это шутка (аналогия с исключениями)? Каждая ветка (включая первую) должна начинаться с проверки выполнения условия. Поэтому, мне кажется, слово TRY - неудачное. Непонятно, все условия проверять, или только до первой неудачи.

А что означает ключевое слово RESTORE?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Конструкция AND THEN?
СообщениеДобавлено: Среда, 19 Январь, 2011 19:24 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Сергей Прохоренко писал(а):
Это шутка (аналогия с исключениями)? Каждая ветка (включая первую) должна начинаться с проверки выполнения условия. Поэтому, мне кажется, слово TRY - неудачное. Непонятно, все условия проверять, или только до первой неудачи.

А что означает ключевое слово RESTORE?

Тут везде проверяется условие кроме первого звена (это не ветки! ветка тут ровно одна! , если хочется аналогии проводить со структурами данных, то тут список, а не дерево, следовательно тут звенья а не ветви).

Предусловие на первое звено можно проверить посредством обычного объемлющего всю эту конструкцию IF'a.

ОК. Я согласен. что AND IF не достаточно для человекочитабельности. Следует заменить на AND THEN IF Cond TRY (и тогда, если УСЛОВИЕ, попробовать).

Если бы это был перебор (попробовали это, не получилось, попробовали то), тогда был бы OR а не AND.

RESTORE -- вызывается когда одно из звеньев не сработало.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Конструкция AND THEN?
СообщениеДобавлено: Среда, 19 Январь, 2011 19:39 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Сергей Прохоренко писал(а):
Предлагаю всем подумать, каким должно быть новое ключевое слово....
... Проверку надо делать и перед первой веткой.

Код:
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;

Сергей Прохоренко писал(а):
Конструкция может присваивать своему параметру номер первой ветви, которую не удалось исполнить.
Номера "ветвей" задаются явно? Если неявно, то пользы мало от него...


Последний раз редактировалось Geniepro Среда, 19 Январь, 2011 19:50, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Конструкция AND THEN?
СообщениеДобавлено: Среда, 19 Январь, 2011 19:45 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
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 намекает, что это ИЛИ а не И.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Конструкция AND THEN?
СообщениеДобавлено: Среда, 19 Январь, 2011 19:48 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
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;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Конструкция AND THEN?
СообщениеДобавлено: Пятница, 21 Январь, 2011 13:29 
Аватара пользователя

Зарегистрирован: Воскресенье, 08 Июль, 2007 00:38
Сообщения: 778
Откуда: Москва
Я пришел к следующему результату:
Вложение:
Progress.png
Progress.png [ 10.61 КБ | Просмотров: 8446 ]


Последний раз редактировалось Сергей Прохоренко Пятница, 21 Январь, 2011 14:19, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 21 Январь, 2011 13:57 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Почему именно progress? Никакой логики...
Может, тогда уж вариант sequence? В языке параллельного программирования Occam последовательность операций помещалась в блок SEQ.
Цитата:
sequence of operations — последовательность операций, технологический процесс


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Конструкция AND THEN?
СообщениеДобавлено: Пятница, 21 Январь, 2011 14:01 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Сергей Прохоренко писал(а):
При окончательном успехе переменная получает значение 0
Какой ноль? За пределами этого блока эта переменная не должна быть доступна.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Конструкция AND THEN?
СообщениеДобавлено: Пятница, 21 Январь, 2011 14:26 
Аватара пользователя

Зарегистрирован: Воскресенье, 08 Июль, 2007 00:38
Сообщения: 778
Откуда: Москва
Geniepro писал(а):
Почему именно progress? Никакой логики...
Может, тогда уж вариант sequence? В языке параллельного программирования Occam последовательность операций помещалась в блок SEQ.
Цитата:
sequence of operations — последовательность операций, технологический процесс


Progress - это не просто последовательность действий, а последовательность успешных действий. Это ведь не русское слово Прогресс, а английское Progress, значение которого несколько иное.


Geniepro писал(а):
Сергей Прохоренко писал(а):
При окончательном успехе переменная получает значение 0
Какой ноль? За пределами этого блока эта переменная не должна быть доступна.


Вовсе нет. Это ведь не параметр цикла, а выходная переменная, сигнализирующая, на каком этапе произошел сбой. Потом эта переменная может быть использована в операторе switch/case.

Забыл добавить, что нумерация этапов автоматическая.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 21 Январь, 2011 15:05 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Хорошо, ещё к вопросу видимости.
Переменные, определённые внутри, скажем, блока 1 будут доступны в блоках 2, 3 и т.д.? Будут они доступны в нижележащих условиях?
А за пределами всей конструкции progress?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 21 Январь, 2011 15:24 
Аватара пользователя

Зарегистрирован: Воскресенье, 08 Июль, 2007 00:38
Сообщения: 778
Откуда: Москва
Geniepro писал(а):
Хорошо, ещё к вопросу видимости.
Переменные, определённые внутри, скажем, блока 1 будут доступны в блоках 2, 3 и т.д.? Будут они доступны в нижележащих условиях?
А за пределами всей конструкции progress?


Никаких ограничений видимости нет - как при линейной последовательности операторов.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 21 Январь, 2011 15:58 
Аватара пользователя

Зарегистрирован: Воскресенье, 08 Июль, 2007 00:38
Сообщения: 778
Откуда: Москва
Вариант 2:
Вложение:
Progress.png
Progress.png [ 14.69 КБ | Просмотров: 8429 ]


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 21 Январь, 2011 16:28 

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 21 Январь, 2011 16:46 
Аватара пользователя

Зарегистрирован: Воскресенье, 08 Июль, 2007 00:38
Сообщения: 778
Откуда: Москва
Драконограф писал(а):
Сергей Прохоренко писал(а):
Вариант 2:
Вложение:
Progress.png
Это так? ...


Не совсем так. У меня первая проверка условия уже перед первым этапом, и далее каждому этапу с некоторым номером предшествует проверка условия с тем же номером.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 21 Январь, 2011 16:48 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 2046
Сергей Прохоренко писал(а):
Драконограф писал(а):
Сергей Прохоренко писал(а):
Вариант 2:
Вложение:
Progress.png
Это так? ...


Не совсем так. У меня первая проверка условия уже перед первым этапом, и далее каждому этапу с некоторым номером предшествует проверка условия с тем же номером.
Да... я всё мыслил в категориях "удался/не удался" :)
В принципе, сравнивая с логикой AND-THEN - тут потенциально широко используются вставки в составе ELSE-блоков (т.к. многие действия при неуспехе разных этапов м.б. повторяющимися).


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 43 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2019, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB