OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Среда, 13 Ноябрь, 2019 22:38

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




Начать новую тему Ответить на тему  [ Сообщений: 85 ]  На страницу 1, 2, 3, 4, 5  След.
Автор Сообщение
СообщениеДобавлено: Вторник, 27 Апрель, 2010 06:59 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3108
Откуда: Астрахань
Перенесено: viewtopic.php?f=82&t=2257
Предлагаю обсудить здесь синтаксическую форму цикла Дейкстры.
Я в какой-то теме навскидку выдал следующую конструкцию:
Код:
do
(охрана_1): список операторов
...
(охрана_k): список операторов
end

В этом варианте, по-крайней мере, все охраны равноправны.

Вместо списка операторов можно оставить один оператор.
Вопрос: можно ли в охране пустой оператор? Вроде можно.

Вместо скобок что можно написать?
Ключевое слово вроде when - как в Аде?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Базовые паттерны циклов
СообщениеДобавлено: Вторник, 27 Апрель, 2010 07:31 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9154
Откуда: Россия, Орёл
Предлагаю по аналогии с CASE-WITH:

WHILE exp1 DO

| exp2 DO

| exp3 DO

END


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 27 Апрель, 2010 08:40 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4525
Откуда: Россия, Орёл
Валерий Лаптев писал(а):
Предлагаю обсудить здесь синтаксическую форму цикла Дейкстры
Призываю (в очередной раз) не мешать обсуждения по разным (пусть и близким) темам.

Сюда вынесено, т.к. в Oberon-7 синтаксическая форма цикла Дейкстры уже имеется...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Базовые паттерны циклов
СообщениеДобавлено: Вторник, 27 Апрель, 2010 08:51 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2316
Откуда: Россия, Томск
В качестве интересного варианта:
WHILE exp1 DO

OR exp2 DO

OR exp3 DO

END


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Базовые паттерны циклов
СообщениеДобавлено: Вторник, 27 Апрель, 2010 09:53 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3108
Откуда: Астрахань
Илья Ермаков писал(а):
Предлагаю по аналогии с CASE-WITH:
WHILE exp1 DO
| exp2 DO
| exp3 DO
END

Да, я об аналогии думал. Но опять же - первое выражение выглядит "главнее" остальных. Хочется, чтобы они были не только семантически равноправными, но и это отражалось в синтаксисе.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Базовые паттерны циклов
СообщениеДобавлено: Вторник, 27 Апрель, 2010 09:55 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3108
Откуда: Астрахань
Александр Ильин писал(а):
В качестве интересного варианта:
WHILE exp1 DO
OR exp2 DO
OR exp3 DO
END

Вот это как раз по смыслу сильно похоже на case. А в цикле Дейкстры - там AND стоит.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Базовые паттерны циклов
СообщениеДобавлено: Вторник, 27 Апрель, 2010 10:16 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2316
Откуда: Россия, Томск
Валерий Лаптев писал(а):
Вот это как раз по смыслу сильно похоже на case. А в цикле Дейкстры - там AND стоит.
Разве? Цикл Дейкстры, насколько я понимаю, выполняетсядо тех пор, пока все условия не станут ложными (OR), а не пока хотя бы одно не станет ложным (&). Если я прав, то по смыслу как раз получается сокращённо вычисляемая в цикле дизъюнкция (OR). См. аналогичный LOOP.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Базовые паттерны циклов
СообщениеДобавлено: Вторник, 27 Апрель, 2010 12:24 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1202
Валерий Лаптев писал(а):
Да, я об аналогии думал. Но опять же - первое выражение выглядит "главнее" остальных. Хочется, чтобы они были не только семантически равноправными, но и это отражалось в синтаксисе.


WHILE
| exp1 DO
| exp2 DO
| exp3 DO
END


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Базовые паттерны циклов
СообщениеДобавлено: Вторник, 27 Апрель, 2010 12:57 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3108
Откуда: Астрахань
Александр Ильин писал(а):
Валерий Лаптев писал(а):
Вот это как раз по смыслу сильно похоже на case. А в цикле Дейкстры - там AND стоит.
Разве? Цикл Дейкстры, насколько я понимаю, выполняетсядо тех пор, пока все условия не станут ложными (OR), а не пока хотя бы одно не станет ложным (&). Если я прав, то по смыслу как раз получается сокращённо вычисляемая в цикле дизъюнкция (OR). См. аналогичный LOOP.

Ага!!!!
Я рассматривал: пока хотя бы одно истинно... :)
Таки да, OR надо ставить, а не AND.
Вот, кстати, моя типичная ошибка с самого начала программирования - неверное логическое выражение... :)
Поделитесь, у кого - какие.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Базовые паттерны циклов
СообщениеДобавлено: Вторник, 27 Апрель, 2010 12:59 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3108
Откуда: Астрахань
Trurl писал(а):
Валерий Лаптев писал(а):
Да, я об аналогии думал. Но опять же - первое выражение выглядит "главнее" остальных. Хочется, чтобы они были не только семантически равноправными, но и это отражалось в синтаксисе.

WHILE
| exp1 DO
| exp2 DO
| exp3 DO
END

Осталось только уточнить, что писать после do. Если список, то придется ставить в конце end - в соответствии с идеологией.
Или можно как-то по-другому?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 27 Апрель, 2010 14:07 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Валерий Лаптев писал(а):
Предлагаю обсудить здесь синтаксическую форму цикла Дейкстры.
Интересно, а это Вам зачем?

Варианты ответов:
1. Вы хотите внести соответствующие изменения в подсистему Dev в Блэкбокс.
2. Вы решили разработать (и реализовать) свой язык.
3. Просто ради того, чтобы потренировать мозги.
4. (что-то другое)

Может показаться, что это не в тему. Но по-моему, ответы на ГЛАВНЫЕ вопросы должны предшествовать активной деятельности.
(инженерный подход, так сказать)

Впрочем, на своём вопросе я не настаиваю. Просто интересно. :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 27 Апрель, 2010 14:19 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3108
Откуда: Астрахань
Я хочу разработать и внедрить у себя на кафедре обучающую среду. В качестве отправной точки - ББ+КП. Но мы смотрим "ширше и глубже" - обучающая среда имеет большие особенности по сравнению с обычной (даже самой необычной) средой программирования.
Ну, а раз среда, то минимальный (минимизированный в стиле Вирта) язык должен быть... Вот и обсуждаю разнообразные аспекты... С Сергеем Прохоренко серьезно обсуждали интерфейс и некоторые особенности среды. Здесь - паттерны циклов, исключения, отступы, процедуры... И т.п.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 27 Апрель, 2010 15:28 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2316
Откуда: Россия, Томск
А в цикле Дейкстры предусмотрена часть, исполняемая всегда? Т.е. так:
Код:
LOOP
   AlwaysDo;
   IF cond1 THEN Do1;
   ELSIF cond2 THEN Do2;
   ELSE
      EXIT
   END;
END;
Предусмотрена ли возможность вставить код вместо AlwaysDo?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Базовые паттерны циклов
СообщениеДобавлено: Вторник, 27 Апрель, 2010 15:30 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2316
Откуда: Россия, Томск
Валерий Лаптев писал(а):
Осталось только уточнить, что писать после do. Если список, то придется ставить в конце end - в соответствии с идеологией.
Или можно как-то по-другому?
В случае CASE список замыкается очередным символом "|" (либо завершающим ELSE или END), так что мне предложение Trurl кажется очень удачным.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 27 Апрель, 2010 16:22 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Валерий Лаптев писал(а):
Я хочу разработать и внедрить у себя на кафедре обучающую среду.
Спасибо что ответили. Успехов!

Кстати, после DO очевидно должно идти StatementSequence.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 27 Апрель, 2010 19:36 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3108
Откуда: Астрахань
Александр Ильин писал(а):
А в цикле Дейкстры предусмотрена часть, исполняемая всегда? Т.е. так:
Код:
LOOP
   AlwaysDo;
   IF cond1 THEN Do1;
   ELSIF cond2 THEN Do2;
   ELSE
      EXIT
   END;
END;
Предусмотрена ли возможность вставить код вместо AlwaysDo?

Я об этом думал. Мне представляется это полезным. Тут можно поиграть вариантами. У самого Дейкстры - только охраняемые команды. Причем, не только в do-od, но и в if-fi.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Базовые паттерны циклов
СообщениеДобавлено: Вторник, 27 Апрель, 2010 19:38 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3108
Откуда: Астрахань
Александр Ильин писал(а):
Валерий Лаптев писал(а):
Осталось только уточнить, что писать после do. Если список, то придется ставить в конце end - в соответствии с идеологией.
Или можно как-то по-другому?
В случае CASE список замыкается очередным символом "|" (либо завершающим ELSE или END), так что мне предложение Trurl кажется очень удачным.

А, ну да! Если вытянуть это все в строку, то получится так:
Код:
WHILE | exp1 DO... | exp2 DO...| exp3 DO... END


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Базовые паттерны циклов
СообщениеДобавлено: Вторник, 27 Апрель, 2010 21:30 
Аватара пользователя

Зарегистрирован: Воскресенье, 08 Июль, 2007 00:38
Сообщения: 778
Откуда: Москва
Поддерживаю: приз зрительских симпатий присудить Trurl.
Я даже не думал, что получится что-нибудь путное - сам мучился и так, и этак, а всё равно виртовский синтаксис оказывался лучше.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Базовые паттерны циклов
СообщениеДобавлено: Вторник, 27 Апрель, 2010 23:09 

Зарегистрирован: Вторник, 20 Ноябрь, 2007 10:45
Сообщения: 28
Сергей Прохоренко писал(а):
Поддерживаю: приз зрительских симпатий присудить Trurl.
Я даже не думал, что получится что-нибудь путное - сам мучился и так, и этак, а всё равно виртовский синтаксис оказывался лучше.

Не понятно зачем там "|", чем
Код:
WHILE
| exp1 DO
| exp2 DO
| exp3 DO
END

отличается от
Код:
WHILE
  exp1 DO
  exp2 DO
  exp3 DO
END

?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 28 Апрель, 2010 07:00 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3108
Откуда: Астрахань
Ну, по аналогии с case. Ntv более, что у Дейкстры именно такая семантика: цикл выполняется, если ХОТЯ БЫ ОДНА охрана истинна.
Но вытянем в строку:
Код:
while expr1 do ... expr2 do ... expr3 do ... end

В таком варианте не видать, чем заканчивается последовательность операторов после do. Мне предыдущий вариант определенно нравится больше:
Код:
while |expr1 do ... |expr2 do ... |expr3 do ... end

Можно | перед первым выражением не ставить, но наличие подчеркивает равноправность всех выражений.


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

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


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

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


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

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