DRAKON.SU

Текущее время: Суббота, 27 Апрель, 2024 06:54

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




Начать новую тему Ответить на тему  [ Сообщений: 53 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: Попытка нарисовать рекурсию
СообщениеДобавлено: Понедельник, 09 Ноябрь, 2009 20:44 

Зарегистрирован: Воскресенье, 04 Ноябрь, 2007 23:01
Сообщения: 511
Не, понятно, что на каждый чих не наздравствуешься. Абстрактные обсуждения врядли инструмент попортят. Зато границы проблем очертят.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Попытка нарисовать рекурсию
СообщениеДобавлено: Вторник, 10 Ноябрь, 2009 09:09 
Аватара пользователя

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

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

Графический элемент "много линий", имхо, плохо годится для обозначения реентерабельности. Лучше хоть треугольнички вверху овала заголовка процедуры.

Следующее соображение. Если процедура написана "хорошо" (не знаю, как это по-научному называется, на ум приходит разве что "нормализованная база данных" :) ), то есть использует только параметры и локальные переменные, то она по определению является реентерабельной!
Следовательно, отдельно помечать специальным символом целесообразно не реентерабельность, а как раз её отсутствие. Дескать, "Внимание! Процедура использует глобальный контекст и может иметь побочные последствия! Реентерабельность использовать запрещается!"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Попытка нарисовать рекурсию
СообщениеДобавлено: Вторник, 10 Ноябрь, 2009 10:13 
Модератор
Аватара пользователя

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

(Просто ДРАКОН вырос из контекста встроенки... Где может не быть стека вообще; а только глобальная память. Поэтому ход мыслей у тех, кто его в такой роли используют, обратный.)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Попытка нарисовать рекурсию
СообщениеДобавлено: Вторник, 10 Ноябрь, 2009 10:15 

Зарегистрирован: Воскресенье, 04 Ноябрь, 2007 23:01
Сообщения: 511
В итоге, я всё больше склоняюсь рассматривать вопрос об изображении рекурсии в Драконе, как наезд со стороны части пользователей, причём абсолютно безосновательный.
Организовать рекурсию без вызова функции(процедуры) ну никак нельзя(в приличном обществе). О goto пока политкорректно умолчим, поскольку против лома нет приёма :)
А вот итерацию - можно завернуть безо всяких вызовов, да ещё столькими разными способами: while, until, repeat, loop, for.. Видимо, такая несправедливость и движет попытками дополнить рекурсию вариантами реализации. Только почему сразу в графике? Почему в текстовом виде никто не предложил ничего подобного для императивных языков за всё время их существования и применения?
Что касается Дракона, то почему-то ни у кого не возникает желание сопроводить явным визуальным маршрутом вызов из процедуры какой-нибудь функции, находящейся внутри применённой в этой процедуре вставки. На то она и вставка, чтобы скрывать детали реализации.
Проконтролировать правильность реализации рекурсии можно по графу вызовов. Проконтролировать правильность самого рекурсивного подхода для данной реализации - пожалуйте в алгебру, там всё прозрачно. Что ещё надо в данном случае?

Посему и ответ мой будет такой - рекурсия в Драконе изображается вставкой.


Alexey_Donskoy писал(а):
..Лучше хоть треугольнички вверху овала заголовка процедуры.
..Следовательно, отдельно помечать специальным символом целесообразно не реентерабельность, а как раз её отсутствие.
Зависит от соглашений о стиле, принятых в начале работ.

Илья Ермаков писал(а):
..Просто ДРАКОН вырос из контекста встроенки... Где может не быть стека вообще; а только глобальная память.
Нифига, всё там нормально со стеком :)


Последний раз редактировалось Рэйлвэй Каген Вторник, 10 Ноябрь, 2009 11:42, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Попытка нарисовать рекурсию
СообщениеДобавлено: Вторник, 10 Ноябрь, 2009 10:50 
Модератор
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Попытка нарисовать рекурсию
СообщениеДобавлено: Вторник, 10 Ноябрь, 2009 10:55 

Зарегистрирован: Воскресенье, 04 Ноябрь, 2007 23:01
Сообщения: 511
А что запрещает его сделать в глобальной памяти?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Попытка нарисовать рекурсию
СообщениеДобавлено: Вторник, 10 Ноябрь, 2009 11:21 
Модератор
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Попытка нарисовать рекурсию
СообщениеДобавлено: Вторник, 10 Ноябрь, 2009 11:32 

Зарегистрирован: Воскресенье, 04 Ноябрь, 2007 23:01
Сообщения: 511
Да, конечно. Я понял, что Вы имели в виду.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Попытка нарисовать рекурсию
СообщениеДобавлено: Вторник, 10 Ноябрь, 2009 14:38 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5851
Откуда: Москва
Виктор О писал(а):
1. Маленькое замечание. В операторе выбора
надо писать не "n:= 1", a "n=1".

Спасибо, что указали на ошибку.
Я сейчас же исправлю все мои рисунки


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Попытка нарисовать рекурсию
СообщениеДобавлено: Среда, 11 Ноябрь, 2009 21:52 

Зарегистрирован: Воскресенье, 04 Ноябрь, 2007 23:01
Сообщения: 511
здесь тоже нарисовали рекурсию:
Шалыто А.А., Туккель Н.И., Шамгунов Н.Н. Ханойские башни и автоматы
Вложение:
hanoy.PNG
hanoy.PNG [ 16.82 КБ | Просмотров: 11818 ]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Попытка нарисовать рекурсию
СообщениеДобавлено: Воскресенье, 29 Ноябрь, 2009 10:38 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 77
Откуда: Астрахань
Alexey_Donskoy писал(а):
Вот, хоть двойку ставьте, не понимаю, чем вызов процедуры отличается от вызова рекурсивной процедуры?!
А, главное, зачем нужно это отличие?!

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Попытка нарисовать рекурсию
СообщениеДобавлено: Воскресенье, 29 Ноябрь, 2009 10:46 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5851
Откуда: Москва
Согласен.
Если можно, скажите, какую именно отметочку Вы предлагаете поставить


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Попытка нарисовать рекурсию
СообщениеДобавлено: Воскресенье, 29 Ноябрь, 2009 10:59 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 77
Откуда: Астрахань
Я имею в виду, что рекурсивного вызова процедуры не бывает без определения соответствующей процедуры. Я с Драконом еще не знаком, но очевидно, определение процедуры на нем можно нарисовать и начинается оно с какого-то значка. Вот на этом значке и повесить отметочку вроде "R".
Но тут требуется рассмотреть вопрос о косвенной рекурсии. Возможно, все взаимосвязанные процедуры обозначать такой меткой.

Или уж не выделять рекурсивные процедуры никак.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Попытка нарисовать рекурсию
СообщениеДобавлено: Воскресенье, 29 Ноябрь, 2009 13:38 

Зарегистрирован: Воскресенье, 06 Апрель, 2008 14:43
Сообщения: 1657
Валерий Лаптев писал(а):
повесить отметочку вроде "R".
Почему "R"?, мы русские и у нас в алфавите нет буквы "R". Может графика, дуга (половина окружности) со стрелочкой к иконе "Заголовок" и/или "Вставка".

Хотя, исходя из принципа Оккама, надо не плодить сущности, а использовать существующие, т.е. достаточно присоединить комментарий.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Попытка нарисовать рекурсию
СообщениеДобавлено: Воскресенье, 29 Ноябрь, 2009 18:05 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1098
Откуда: Россия, Чебоксары
Как это по-российски!
Долго заводились, но завелись - и понесло!

А ЗАЧЕМ ???

Хоть формальную постановку дайте - зачем нужно выделять рекурсивную процедуру?

Могу только повторить:

- рекурсия находится совсем в иной плоскости, нежели синтаксис и даже семантика языка (а именно в области стиля, метода программирования, конкретного алгоритма и тэдэ);
- все процедуры целесообразно рассматривать как реентерабельные, пока явно не указано обратного. В этом предложении, кстати, практического смысла значительно больше, чем во всех предыдущих рассуждениях. "Комбинаторщики", блин!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Попытка нарисовать рекурсию
СообщениеДобавлено: Понедельник, 30 Ноябрь, 2009 09:35 

Зарегистрирован: Воскресенье, 09 Март, 2008 22:38
Сообщения: 341
Alexey_Donskoy писал(а):
все процедуры целесообразно рассматривать как реентерабельные, пока явно не указано обратного

+1.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Попытка нарисовать рекурсию
СообщениеДобавлено: Понедельник, 30 Ноябрь, 2009 10:13 

Зарегистрирован: Вторник, 11 Август, 2009 11:44
Сообщения: 42
Откуда: Бердск
Alexey_Donskoy писал(а):
- все процедуры целесообразно рассматривать как реентерабельные, пока явно не указано обратного
В этом предложение ключевое слово - целесообразно :wink:
У меня иные наблюдения про целесообразность.
Как минимум, в 9 случаях из 10 этого не требуется. Но, серьезно влияет на эффективность кода. Как, впрочем, и на мозги того, кто этот код делает/читает


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Попытка нарисовать рекурсию
СообщениеДобавлено: Понедельник, 30 Ноябрь, 2009 10:28 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 631
Откуда: Россия, Орёл
Galkov писал(а):
У меня иные наблюдения про целесообразность.


viewtopic.php?f=23&t=2135


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Попытка нарисовать рекурсию
СообщениеДобавлено: Понедельник, 30 Ноябрь, 2009 10:34 

Зарегистрирован: Понедельник, 23 Март, 2009 10:35
Сообщения: 12
Откуда: Ханты-Мансийск
Galkov писал(а):
Alexey_Donskoy писал(а):
- все процедуры целесообразно рассматривать как реентерабельные, пока явно не указано обратного
В этом предложение ключевое слово - целесообразно :wink:
У меня иные наблюдения про целесообразность.
Как минимум, в 9 случаях из 10 этого не требуется. Но, серьезно влияет на эффективность кода. Как, впрочем, и на мозги того, кто этот код делает/читает


Ну, наконец.
По моему, цель задана подписью к иллюстрации топикстартера: Рис.192.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Попытка нарисовать рекурсию
СообщениеДобавлено: Понедельник, 30 Ноябрь, 2009 11:17 

Зарегистрирован: Вторник, 11 Август, 2009 11:44
Сообщения: 42
Откуда: Бердск
Дмитрий Колосов писал(а):
По моему, цель задана подписью к иллюстрации топикстартера
Это кому, замечание на невнимательность, мне, или Alexey_Donskoy :?:


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

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


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

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


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

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