DRAKON.SU

Текущее время: Четверг, 28 Март, 2024 11:07

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




Начать новую тему Ответить на тему  [ Сообщений: 67 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Re: Как правильно построить цикл?
СообщениеДобавлено: Воскресенье, 05 Февраль, 2012 21:27 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1098
Откуда: Россия, Чебоксары
Ильченко Эдуард писал(а):
Да вот Владимир Паронджанов вроде говорит, что в любой цикл разрешён только один вход ...
Ну, это смотря что понимать под циклом :)
Надо чётко сознавать, что силуэт - что-то вроде "облагороженной замены goto". То есть конструкция ни разу не структурная, но допускаемая автором как меньшее зло по сравнению с полной анархией.
И, если цикл (реальный алгоритмический цикл) разбить на несколько веток в силуэте (что автор тоже допускает, разговор совсем недавно об этом был), то возникает возможность побочных эффектов вроде входа в середину цикла. И сам по себе Дракон запретить этого не может, потому что цикл (как алгоритмическая конструкция) перестаёт быть целостной конструкцией, и, глядя на силуэт, найти этот цикл не так-то просто.

Силуэт вводился для того, чтобы "упаковать" длинный алгоритм в плотно заполненный прямоугольник. Но, получив один плюс, в довесок получили и ещё лавину минусов в виде разрыва. Поэтому я против силуэта в принципе.

Иерархическая упаковка (даже а-ля Форт, а тем более в функциональных языках) мне представляется куда как более предпочтительной.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно построить цикл?
СообщениеДобавлено: Понедельник, 06 Февраль, 2012 12:58 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5846
Откуда: Москва
Ильченко Эдуард писал(а):
Владимир Паронджанов писал(а):
В языке Дракон цикл (любой цикл) имеет только один вход.

Т.е. доп вход как на рисунке ниже, тоже запрещён?
Вложение:
С2.png


Уважаемый Эдуард!

Подтверждаю, что дополнительный вход на Вашем рисунке запрещён.

Перефразирую: дополнительный вход в веточный цикл запрещён.

Из этого правила НЕТ исключений.

Таким образом, наиболее общей является формулировка:
Цитата:
В языке Дракон цикл (любой цикл) имеет только один вход.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно построить цикл?
СообщениеДобавлено: Понедельник, 06 Февраль, 2012 13:18 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1098
Откуда: Россия, Чебоксары
Владимир Паронджанов писал(а):
Перефразирую: дополнительный вход в веточный цикл запрещён.
А что есть веточный цикл?
Разве он ограничивается какими-либо конкретными конструкциями языка?
Если нет, то, следовательно, существует только в воображении разработчика, но не как строгая алгоритмическая конструкция.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно построить цикл?
СообщениеДобавлено: Понедельник, 06 Февраль, 2012 13:29 

Зарегистрирован: Понедельник, 09 Ноябрь, 2009 17:29
Сообщения: 904
Откуда: Россия, Питер
Alexey_Donskoy писал(а):
Другими словами, редактор, разрешающий веточные циклы, но запрещающий вход в середину, сделать вряд ли возможно - нет критериев...

Не понял в чём сложность ...
Порядок следования веток известен, начальные конечные ветки цикла известны ...
Проблемы с редактором не вижу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно построить цикл?
СообщениеДобавлено: Понедельник, 06 Февраль, 2012 13:33 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1098
Откуда: Россия, Чебоксары
Ильченко Эдуард писал(а):
Порядок следования веток известен, начальные конечные ветки цикла известны ...
А что, разве начальная и конечная ветка помечаются специальной иконой?
Если это так, значит, я был невнимателен, и всё не так страшно. :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно построить цикл?
СообщениеДобавлено: Понедельник, 06 Февраль, 2012 13:53 

Зарегистрирован: Понедельник, 09 Ноябрь, 2009 17:29
Сообщения: 904
Откуда: Россия, Питер
Alexey_Donskoy писал(а):
А что, разве начальная и конечная ветка помечаются специальной иконой?

Таки да : )
С чёрным треугольничком ...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно построить цикл?
СообщениеДобавлено: Понедельник, 06 Февраль, 2012 14:16 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 631
Откуда: Россия, Орёл
Если запретить вход в веточный цикл, то Дракон сразу перестаёт поддерживать автоматное программирование.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно построить цикл?
СообщениеДобавлено: Понедельник, 06 Февраль, 2012 14:34 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1098
Откуда: Россия, Чебоксары
Ильченко Эдуард писал(а):
Таки да : ) С чёрным треугольничком ...
Э-э, нетушки!
Это всего лишь передача управления на предыдущую ветку. Ясно, что сам по себе подобный переход образует циклическую конструкцию, но для строгого определения границ цикла (особенно когда они вложенные) требуются дополнительные ограничения, которые явно не сформулированы в языке.
Кроме того, при вложенных циклах возникнет неоднозначность а) выхода из цикла, б) допустимости выбора иконы "адрес" одной из предыдущих веток...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно построить цикл?
СообщениеДобавлено: Понедельник, 06 Февраль, 2012 23:10 

Зарегистрирован: Понедельник, 09 Ноябрь, 2009 17:29
Сообщения: 904
Откуда: Россия, Питер
Alexey_Donskoy писал(а):
Ильченко Эдуард писал(а):
Таки да : ) С чёрным треугольничком ...
Э-э, нетушки!
Это всего лишь передача управления на предыдущую ветку. Ясно, что сам по себе подобный переход образует циклическую конструкцию, но для строгого определения границ цикла (особенно когда они вложенные) требуются дополнительные ограничения, которые явно не сформулированы в языке.
Кроме того, при вложенных циклах возникнет неоднозначность а) выхода из цикла, б) допустимости выбора иконы "адрес" одной из предыдущих веток...

Согласно авторскому определению в книге «Как улучшить работу ума»
Цитата:
Веточный цикл образуется, когда метка в иконе “адрес” указывает либо на свою ветку, либо на ветку, которая находится левее.

Границы визуально задаются иконами с чёрными треугольниками.
Разрешён только один вход в веточный цикл и, по всей видимости, множество выходов. Что, кстати, присутствует и в обычном цикле (который не ДЛЯ).

Ну, вот такой он, веточный цикл : )

По пункту а) — какая неоднозначность имеется ввиду? (в этом месте однозначно выходим из цикла(ов), при достижении некоторого состояния)

По пункту б) — не понял, возможно имелся ввиду выбор иконы «Имя ветки»? (выход из веточного цикла в предыдущие ветки невозможен по определению, так как при этом образуется повторный вход)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно построить цикл?
СообщениеДобавлено: Понедельник, 06 Февраль, 2012 23:17 

Зарегистрирован: Понедельник, 09 Ноябрь, 2009 17:29
Сообщения: 904
Откуда: Россия, Питер
Вопрос Владимиру Паронджанову

В книге «Как улучшить работу ума» сказано
Цитата:
Ветка называется одноадресной, если она имеет одну икону “адрес”. Если все ветки одноадресные, силуэт считается одноадресным.

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

Значит ли это, что конструкция, показанная на рисунке ниже, некорректна (учитывая, что силуэт может не содержать икону «Конец»)?
Вложение:
Светофор.png
Светофор.png [ 4.94 КБ | Просмотров: 16709 ]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно построить цикл?
СообщениеДобавлено: Вторник, 07 Февраль, 2012 00:15 

Зарегистрирован: Понедельник, 09 Ноябрь, 2009 17:29
Сообщения: 904
Откуда: Россия, Питер
Илья Ермаков писал(а):
Если запретить вход в веточный цикл, то Дракон сразу перестаёт поддерживать автоматное программирование.

Если Дракон, в его нынешнем состоянии, использовать для автоматного программирования, то пропадает возможность использовать ветки для организации ветвления внутри перехода от состояния к состоянию. Иногда это полезно. Для обеспечения такой возможности я отделяю ветки, обозначающие состояние, от других веток словом СОСТОЯНИЕ и допускаю : ) переход от состояния к состоянию через икону Выбор перед входом в силуэт. Об этом писал здесь.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно построить цикл?
СообщениеДобавлено: Вторник, 07 Февраль, 2012 08:49 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1098
Откуда: Россия, Чебоксары
Ильченко Эдуард писал(а):
Границы визуально задаются иконами с чёрными треугольниками.
Зато никак визуально не задаются условия продолжения и окончания цикла.

Цитата:
какая неоднозначность имеется ввиду?
Вот "канонический" вид двух вложенных циклов:
Вложение:
Веточный цикл-1_1.png
Веточный цикл-1_1.png [ 4.11 КБ | Просмотров: 16693 ]

Выполним эквивалентное преобразование... не алгоритма даже, а его представления на языке Дракон:
Вложение:
Веточный цикл-2_1.png
Веточный цикл-2_1.png [ 8.61 КБ | Просмотров: 16693 ]

Продолжим эквивалентное преобразование:
Вложение:
Веточный цикл-3_1.png
Веточный цикл-3_1.png [ 4.26 КБ | Просмотров: 16693 ]

Отметим, что алгоритм не изменился ни на йоту.
Второе представление пока ещё не нарушает никаких правил.
Третье представление тоже ничего не нарушает, но уже основательно запутано с точки зрения эргономики. Здесь желательны дополнительные ограничения (вроде "чем правее возврат, тем к более верхнему уровню вложенности цикла").

Посмотрим ещё раз на третье представление. Вопрос на засыпку: куда мы имеем право послать адресную икону, которая сейчас указывает на "выход"?
На А - можем, ибо получится Continue внешнего цикла А.
На Б - можем, ибо получится Continue вложенного цикла Б.
На В - можем, ибо получится Continue новообразованного самого внутреннего цикла В.
Ну и на выход - тоже можем :D

Вернёмся к первому представлению.
Адресные иконы, которые завершают ветку В (сейчас назначенные на Б и Г) точно так же можем назначить куда угодно.
Адресную икону Б первой ветки можем назначить куда угодно, кроме В (переход внутрь вложенного цикла, который можно диагностировать однозначно).
А вот адресные иконы в ветке Г мы тоже можем назначить куда угодно (!).
Назначив на А, получим продолжение цикла А.
Назначив на Б, получим продолжение цикла Б (сам цикл при этом просто становится многоветочным!).

И это только ещё самый элементарный пример!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно построить цикл?
СообщениеДобавлено: Вторник, 07 Февраль, 2012 09:05 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 631
Откуда: Россия, Орёл
Ильченко Эдуард писал(а):
Если Дракон, в его нынешнем состоянии, использовать для автоматного программирования, то пропадает возможность использовать ветки для организации ветвления внутри перехода от состояния к состоянию. Иногда это полезно. Для обеспечения такой возможности я отделяю ветки, обозначающие состояние, от других веток словом СОСТОЯНИЕ и допускаю : ) переход от состояния к состоянию через икону Выбор перед входом в силуэт. Об этом писал здесь.

Не совсем понял, почему "пропадает"... Согласен с тем, что "полезно" и "отделяю" :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно построить цикл?
СообщениеДобавлено: Вторник, 07 Февраль, 2012 09:42 
Модератор
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно построить цикл?
СообщениеДобавлено: Вторник, 07 Февраль, 2012 10:04 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1098
Откуда: Россия, Чебоксары
Евгений Темиргалеев писал(а):
Поискать аналогии и распространить ограничения "одномерного" структурного программирования на второе измерение?
Сама идея силуэта, насколько я понимаю, как раз прямо этому противоречит. :wink:

И, если уж на то пошло, уже много раз говорил о том, что мне не нравится идея решить одну когнитивно-эргономическую проблему (длинный алгоритм) за счёт появления другой (разрыв).

Да и как ограничивать-то? Вон, посмотрите на схемы выше. Как ни преобразовывай представление, всё фигня выходит. И всё из-за разрыва. Который вносит неоднозначность.
Короче, сами себе создаём проблемы, которые потом героически приходится предолевать...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно построить цикл?
СообщениеДобавлено: Вторник, 07 Февраль, 2012 15:01 

Зарегистрирован: Понедельник, 09 Ноябрь, 2009 17:29
Сообщения: 904
Откуда: Россия, Питер
Илья Ермаков писал(а):
Не совсем понял, почему "пропадает"... Согласен с тем, что "полезно" и "отделяю" :)

Если "отделить" ветки с состоянием от веток с переходом, то ничего не "пропадает" : )


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно построить цикл?
СообщениеДобавлено: Вторник, 07 Февраль, 2012 15:59 

Зарегистрирован: Понедельник, 09 Ноябрь, 2009 17:29
Сообщения: 904
Откуда: Россия, Питер
Alexey_Donskoy писал(а):
Посмотрим ещё раз на третье представление. Вопрос на засыпку: куда мы имеем право послать адресную икону, которая сейчас указывает на "выход"?
На А - можем, ибо получится Continue внешнего цикла А.
На Б - можем, ибо получится Continue вложенного цикла Б.
На В - можем, ибо получится Continue новообразованного самого внутреннего цикла В.
Ну и на выход - тоже можем :D

Во вселенной Дракона такая схема не может существовать по определению, так как у неё имеется второй вход в цикл : )
Вложение:
3.png
3.png [ 20.88 КБ | Просмотров: 16659 ]


Alexey_Donskoy писал(а):
Вернёмся к первому представлению.
Адресные иконы, которые завершают ветку В (сейчас назначенные на Б и Г) точно так же можем назначить куда угодно.
Адресную икону Б первой ветки можем назначить куда угодно, кроме В (переход внутрь вложенного цикла, который можно диагностировать однозначно).
А вот адресные иконы в ветке Г мы тоже можем назначить куда угодно (!).
Назначив на А, получим продолжение цикла А.
Назначив на Б, получим продолжение цикла Б (сам цикл при этом просто становится многоветочным!).

Куда угодно назначать нельзя. Появляются доп входы.

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

Хотелось бы услышать мнение Владимира Паронджанова, корректен ли такой переход и возможен ли выход из цикла влево в каких-то случаях.

Т. е. бывают однозначно невозможные выходы влево (когда образуется доп вход в цикл) и выходы влево без образования доп входа (что с ними делать?).
Вложение:
1.png
1.png [ 9.44 КБ | Просмотров: 16659 ]

Вложение:
1a.png
1a.png [ 15.14 КБ | Просмотров: 16659 ]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно построить цикл?
СообщениеДобавлено: Вторник, 07 Февраль, 2012 16:12 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1098
Откуда: Россия, Чебоксары
Ильченко Эдуард писал(а):
Во вселенной Дракона такая схема не может существовать по определению, так как у неё имеется второй вход в цикл
А мне кажется, что в данном случае Вы злостно путаете алгоритм и его представление (отображение, view).
Алгоритм со волженными циклами вполне структурен, легален и валиден ;)
А то, что некоторые гомеоморфные преобразования отображения алгоритма недопустимы - это проблема отображения, не так ли?

Проблемы отображения (визуализации) не должны влиять на процесс разработки алгоритма. Иначе добавляется лишняя сущность, которая не только ухудшает эргономику, но и может привести к краху всего процесса! :wink:

Цитата:
Куда угодно назначать нельзя. Появляются доп входы.
В алгоритме - не появляются. Появляются лишь в отображении (представлении). Что опять же есть проблема представления, а не алгоритма.

Алгоритм - здесь основное. Основная сущность. Она строга и непротиворечива.
В отображении всегда могут появляться противоречия. Потому что невозможно отобразить объёмную структуру на плоскость (а плоскую - в линию) без разрывов и пересечений.

Отображение же всегда играет подчинённую роль и служит вспомогательным инструментом.
Поэтому нельзя заморачиваться на проблемах отображения!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно построить цикл?
СообщениеДобавлено: Вторник, 07 Февраль, 2012 16:56 

Зарегистрирован: Понедельник, 09 Ноябрь, 2009 17:29
Сообщения: 904
Откуда: Россия, Питер
Alexey_Donskoy писал(а):
Ильченко Эдуард писал(а):
Во вселенной Дракона такая схема не может существовать по определению, так как у неё имеется второй вход в цикл
А мне кажется, что в данном случае Вы злостно путаете алгоритм и его представление (отображение, view).

Я везде говорю о Драконе (частном визуальном представлении алгоритма), а не о самом алгоритме. И о правилах, которые позволяют непротиворечиво отобразить алгоритм некоторым визуальным образом. Если есть возможность изобразить алгоритм каким-то другим, отличным от Дракона способом, то это прекрасно : ), но в данном конкретном случае мне это не интересно.

Alexey_Donskoy писал(а):
Проблемы отображения (визуализации) не должны влиять на процесс разработки алгоритма. Иначе добавляется лишняя сущность, которая не только ухудшает эргономику, но и может привести к краху всего процесса! :wink:

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

Alexey_Donskoy писал(а):
Цитата:
Куда угодно назначать нельзя. Появляются доп входы.
В алгоритме - не появляются. Появляются лишь в отображении (представлении). Что опять же есть проблема представления, а не алгоритма.

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

Alexey_Donskoy писал(а):
Отображение же всегда играет подчинённую роль и служит вспомогательным инструментом.
Поэтому нельзя заморачиваться на проблемах отображения!

Что-то я в растерянности ... : )
А что мы здесь тогда обсуждаем?

Давайте ничего не будем отображать ни текстом, ни графикой, ни словами, ни действиями ...
Ведь окружающий мир строг и непротиворечив. И в его отображении всегда могут появляться противоречия : )


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно построить цикл?
СообщениеДобавлено: Вторник, 07 Февраль, 2012 17:19 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1098
Откуда: Россия, Чебоксары
Ильченко Эдуард писал(а):
Я везде говорю о Драконе (частном визуальном представлении алгоритма), а не о самом алгоритме.
А я везде говорю об эргономичных инструментах, которые помогают минимизировать затраты на разработку.
Для меня Дракон как таковой ни разу не интересен. Только как один из возможных примеров упомянутых инструментов.

В данном случае инструмент оказался неудобен (и даже, вероятно, неадекватен).
Следовательно, есть два пути: искать более адекватный инструмент или улучшить то, что есть.

Цитата:
Достоинства визуализации могут очень положительно влиять на процесс разработки алгоритма.
Естественно!
Но есть и обратный эффект отрицательного влияния. Когда это влияние доходит до того, что язык визуализации навязывает выбор алгоритмического решения, то зто серьёзный звонок задуматься об инструменте... несмотря на все его плюсы :)

Цитата:
Давайте ничего не будем отображать ни текстом, ни графикой, ни словами, ни действиями ...
Пока рановато! Не созрели... :wink:


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

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


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

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


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

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