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;
   IF cond1 THEN Do1;
   ELSIF cond2 THEN Do2;
   ELSE
      EXIT
   END;
END;
Предусмотрена ли возможность вставить код вместо AlwaysDo?

Автор:  Александр Ильин [ Вторник, 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;
   IF cond1 THEN Do1;
   ELSIF cond2 THEN Do2;
   ELSE
      EXIT
   END;
END;
Предусмотрена ли возможность вставить код вместо AlwaysDo?

Я об этом думал. Мне представляется это полезным. Тут можно поиграть вариантами. У самого Дейкстры - только охраняемые команды. Причем, не только в 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/