OberonCore https://forum.oberoncore.ru/ |
|
Альтернативная синтаксическая форма цикла Дейкстры https://forum.oberoncore.ru/viewtopic.php?f=30&t=2602 |
Страница 1 из 5 |
Автор: | Валерий Лаптев [ Вторник, 27 Апрель, 2010 06:59 ] |
Заголовок сообщения: | Альтернативная синтаксическая форма цикла Дейкстры |
Перенесено: viewtopic.php?f=82&t=2257 Предлагаю обсудить здесь синтаксическую форму цикла Дейкстры. Я в какой-то теме навскидку выдал следующую конструкцию: Код: do (охрана_1): список операторов ... (охрана_k): список операторов end В этом варианте, по-крайней мере, все охраны равноправны. Вместо списка операторов можно оставить один оператор. Вопрос: можно ли в охране пустой оператор? Вроде можно. Вместо скобок что можно написать? Ключевое слово вроде when - как в Аде? |
Автор: | Илья Ермаков [ Вторник, 27 Апрель, 2010 07:31 ] |
Заголовок сообщения: | Re: Базовые паттерны циклов |
Предлагаю по аналогии с CASE-WITH: WHILE exp1 DO | exp2 DO | exp3 DO END |
Автор: | Евгений Темиргалеев [ Вторник, 27 Апрель, 2010 08:40 ] |
Заголовок сообщения: | Re: Альтернативная синтаксическая форма цикла Дейкстры |
Валерий Лаптев писал(а): Предлагаю обсудить здесь синтаксическую форму цикла Дейкстры Призываю (в очередной раз) не мешать обсуждения по разным (пусть и близким) темам.Сюда вынесено, т.к. в Oberon-7 синтаксическая форма цикла Дейкстры уже имеется... |
Автор: | Александр Ильин [ Вторник, 27 Апрель, 2010 08:51 ] |
Заголовок сообщения: | Re: Базовые паттерны циклов |
В качестве интересного варианта: WHILE exp1 DO OR exp2 DO OR exp3 DO END |
Автор: | Валерий Лаптев [ Вторник, 27 Апрель, 2010 09:53 ] |
Заголовок сообщения: | Re: Базовые паттерны циклов |
Илья Ермаков писал(а): Предлагаю по аналогии с CASE-WITH: WHILE exp1 DO | exp2 DO | exp3 DO END Да, я об аналогии думал. Но опять же - первое выражение выглядит "главнее" остальных. Хочется, чтобы они были не только семантически равноправными, но и это отражалось в синтаксисе. |
Автор: | Валерий Лаптев [ Вторник, 27 Апрель, 2010 09:55 ] |
Заголовок сообщения: | Re: Базовые паттерны циклов |
Александр Ильин писал(а): В качестве интересного варианта: WHILE exp1 DO OR exp2 DO OR exp3 DO END Вот это как раз по смыслу сильно похоже на case. А в цикле Дейкстры - там AND стоит. |
Автор: | Александр Ильин [ Вторник, 27 Апрель, 2010 10:16 ] |
Заголовок сообщения: | Re: Базовые паттерны циклов |
Валерий Лаптев писал(а): Вот это как раз по смыслу сильно похоже на case. А в цикле Дейкстры - там AND стоит. Разве? Цикл Дейкстры, насколько я понимаю, выполняетсядо тех пор, пока все условия не станут ложными (OR), а не пока хотя бы одно не станет ложным (&). Если я прав, то по смыслу как раз получается сокращённо вычисляемая в цикле дизъюнкция (OR). См. аналогичный LOOP.
|
Автор: | Trurl [ Вторник, 27 Апрель, 2010 12:24 ] |
Заголовок сообщения: | Re: Базовые паттерны циклов |
Валерий Лаптев писал(а): Да, я об аналогии думал. Но опять же - первое выражение выглядит "главнее" остальных. Хочется, чтобы они были не только семантически равноправными, но и это отражалось в синтаксисе. WHILE | exp1 DO | exp2 DO | exp3 DO END |
Автор: | Валерий Лаптев [ Вторник, 27 Апрель, 2010 12:57 ] |
Заголовок сообщения: | Re: Базовые паттерны циклов |
Александр Ильин писал(а): Валерий Лаптев писал(а): Вот это как раз по смыслу сильно похоже на case. А в цикле Дейкстры - там AND стоит. Разве? Цикл Дейкстры, насколько я понимаю, выполняетсядо тех пор, пока все условия не станут ложными (OR), а не пока хотя бы одно не станет ложным (&). Если я прав, то по смыслу как раз получается сокращённо вычисляемая в цикле дизъюнкция (OR). См. аналогичный LOOP.Ага!!!! Я рассматривал: пока хотя бы одно истинно... Таки да, OR надо ставить, а не AND. Вот, кстати, моя типичная ошибка с самого начала программирования - неверное логическое выражение... Поделитесь, у кого - какие. |
Автор: | Валерий Лаптев [ Вторник, 27 Апрель, 2010 12:59 ] |
Заголовок сообщения: | Re: Базовые паттерны циклов |
Trurl писал(а): Валерий Лаптев писал(а): Да, я об аналогии думал. Но опять же - первое выражение выглядит "главнее" остальных. Хочется, чтобы они были не только семантически равноправными, но и это отражалось в синтаксисе. WHILE | exp1 DO | exp2 DO | exp3 DO END Осталось только уточнить, что писать после do. Если список, то придется ставить в конце end - в соответствии с идеологией. Или можно как-то по-другому? |
Автор: | igor [ Вторник, 27 Апрель, 2010 14:07 ] |
Заголовок сообщения: | Re: Альтернативная синтаксическая форма цикла Дейкстры |
Валерий Лаптев писал(а): Предлагаю обсудить здесь синтаксическую форму цикла Дейкстры. Интересно, а это Вам зачем?Варианты ответов: 1. Вы хотите внести соответствующие изменения в подсистему Dev в Блэкбокс. 2. Вы решили разработать (и реализовать) свой язык. 3. Просто ради того, чтобы потренировать мозги. 4. (что-то другое) Может показаться, что это не в тему. Но по-моему, ответы на ГЛАВНЫЕ вопросы должны предшествовать активной деятельности. (инженерный подход, так сказать) Впрочем, на своём вопросе я не настаиваю. Просто интересно. |
Автор: | Валерий Лаптев [ Вторник, 27 Апрель, 2010 14:19 ] |
Заголовок сообщения: | Re: Альтернативная синтаксическая форма цикла Дейкстры |
Я хочу разработать и внедрить у себя на кафедре обучающую среду. В качестве отправной точки - ББ+КП. Но мы смотрим "ширше и глубже" - обучающая среда имеет большие особенности по сравнению с обычной (даже самой необычной) средой программирования. Ну, а раз среда, то минимальный (минимизированный в стиле Вирта) язык должен быть... Вот и обсуждаю разнообразные аспекты... С Сергеем Прохоренко серьезно обсуждали интерфейс и некоторые особенности среды. Здесь - паттерны циклов, исключения, отступы, процедуры... И т.п. |
Автор: | Александр Ильин [ Вторник, 27 Апрель, 2010 15:28 ] |
Заголовок сообщения: | Re: Альтернативная синтаксическая форма цикла Дейкстры |
А в цикле Дейкстры предусмотрена часть, исполняемая всегда? Т.е. так: Код: LOOP Предусмотрена ли возможность вставить код вместо AlwaysDo?
AlwaysDo; IF cond1 THEN Do1; ELSIF cond2 THEN Do2; ELSE EXIT END; END; |
Автор: | Александр Ильин [ Вторник, 27 Апрель, 2010 15:30 ] |
Заголовок сообщения: | Re: Базовые паттерны циклов |
Валерий Лаптев писал(а): Осталось только уточнить, что писать после do. Если список, то придется ставить в конце end - в соответствии с идеологией. В случае CASE список замыкается очередным символом "|" (либо завершающим ELSE или END), так что мне предложение Trurl кажется очень удачным.
Или можно как-то по-другому? |
Автор: | igor [ Вторник, 27 Апрель, 2010 16:22 ] |
Заголовок сообщения: | Re: Альтернативная синтаксическая форма цикла Дейкстры |
Валерий Лаптев писал(а): Я хочу разработать и внедрить у себя на кафедре обучающую среду. Спасибо что ответили. Успехов!Кстати, после DO очевидно должно идти StatementSequence. |
Автор: | Валерий Лаптев [ Вторник, 27 Апрель, 2010 19:36 ] |
Заголовок сообщения: | Re: Альтернативная синтаксическая форма цикла Дейкстры |
Александр Ильин писал(а): А в цикле Дейкстры предусмотрена часть, исполняемая всегда? Т.е. так: Код: LOOP Предусмотрена ли возможность вставить код вместо AlwaysDo?AlwaysDo; IF cond1 THEN Do1; ELSIF cond2 THEN Do2; ELSE EXIT END; END; Я об этом думал. Мне представляется это полезным. Тут можно поиграть вариантами. У самого Дейкстры - только охраняемые команды. Причем, не только в do-od, но и в if-fi. |
Автор: | Валерий Лаптев [ Вторник, 27 Апрель, 2010 19:38 ] |
Заголовок сообщения: | Re: Базовые паттерны циклов |
Александр Ильин писал(а): Валерий Лаптев писал(а): Осталось только уточнить, что писать после do. Если список, то придется ставить в конце end - в соответствии с идеологией. В случае CASE список замыкается очередным символом "|" (либо завершающим ELSE или END), так что мне предложение Trurl кажется очень удачным.Или можно как-то по-другому? А, ну да! Если вытянуть это все в строку, то получится так: Код: WHILE | exp1 DO... | exp2 DO...| exp3 DO... END
|
Автор: | Сергей Прохоренко [ Вторник, 27 Апрель, 2010 21:30 ] |
Заголовок сообщения: | Re: Базовые паттерны циклов |
Поддерживаю: приз зрительских симпатий присудить Trurl. Я даже не думал, что получится что-нибудь путное - сам мучился и так, и этак, а всё равно виртовский синтаксис оказывался лучше. |
Автор: | MaximGB [ Вторник, 27 Апрель, 2010 23:09 ] |
Заголовок сообщения: | Re: Базовые паттерны циклов |
Сергей Прохоренко писал(а): Поддерживаю: приз зрительских симпатий присудить Trurl. Я даже не думал, что получится что-нибудь путное - сам мучился и так, и этак, а всё равно виртовский синтаксис оказывался лучше. Не понятно зачем там "|", чем Код: WHILE | exp1 DO | exp2 DO | exp3 DO END отличается от Код: WHILE exp1 DO exp2 DO exp3 DO END ? |
Автор: | Валерий Лаптев [ Среда, 28 Апрель, 2010 07:00 ] |
Заголовок сообщения: | Re: Альтернативная синтаксическая форма цикла Дейкстры |
Ну, по аналогии с case. Ntv более, что у Дейкстры именно такая семантика: цикл выполняется, если ХОТЯ БЫ ОДНА охрана истинна. Но вытянем в строку: Код: while expr1 do ... expr2 do ... expr3 do ... end В таком варианте не видать, чем заканчивается последовательность операторов после do. Мне предыдущий вариант определенно нравится больше: Код: while |expr1 do ... |expr2 do ... |expr3 do ... end Можно | перед первым выражением не ставить, но наличие подчеркивает равноправность всех выражений. |
Страница 1 из 5 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |