DRAKON.SU

Текущее время: Вторник, 17 Июнь, 2025 17:07

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




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

Зарегистрирован: Понедельник, 23 Март, 2009 10:35
Сообщения: 12
Откуда: Ханты-Мансийск
Galkov писал(а):
Это кому, замечание на невнимательность, мне, или Alexey_Donskoy


Не ожидал, что будет расценено как замечание.
Выражал согласие с вашим комментарием.


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

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

И правильно делает, как мне показалось.
И тут, на тебе - перечитайте старттопера еще раз :)


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

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1097
Откуда: Россия, Чебоксары
Дмитрий Колосов писал(а):
По моему, цель задана подписью к иллюстрации топикстартера: Рис.192.
При всём почтении, это не цель!
Вот я хочу облако нарисовать - давайте тоже в Дракон введём! (А для обоснования вспомним про какой-нибудь Cloud Computing :lol: )

Цель - это ответ на вопрос "Зачем"!

Зачем нужно специальным образом изображать рекурсию?
Какие из этого следуют существенные преимущества?

Galkov писал(а):
Как минимум, в 9 случаях из 10 этого не требуется. Но, серьезно влияет на эффективность кода.
Реентерабельность влияет на эффективность кода?! Ну дык, это смотря на чём и для чего писать! В любом случае, ключевым вопросом остаётся использование в процедуре глобального контекста, и таковое использование необходимо помечать отдельно, чтобы сразу видна была опасность всяких побочных эффектов.

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

А вот вопрос "как изобразить рекурсию" - имхо, лишён смысла. Чего её изображать - вызвали процедуру и всего делов. Если нужен именно паттерн проектирования (типа в процедуре должна быть проверка уровня рекурсии, выход из рекурсии с возвратом результата и т.п.) - так пожалуйтста! Только никакого отношения к синтаксису языка (а хоть бы и Дракона) это не имеет!

Имхо, напрасно Паронджанов повёлся на всякие дурацкие вопросы...


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

Зарегистрирован: Понедельник, 23 Март, 2009 10:35
Сообщения: 12
Откуда: Ханты-Мансийск
Alexey_Donskoy писал(а):
Дмитрий Колосов писал(а):
По моему, цель задана подписью к иллюстрации топикстартера: Рис.192.
При всём почтении, это не цель!
Вот я хочу облако нарисовать - давайте тоже в Дракон введём! (А для обоснования вспомним про какой-нибудь Cloud Computing :lol: )

Цель - это ответ на вопрос "Зачем"!
<skip>
Имхо, напрасно Паронджанов повёлся на всякие дурацкие вопросы...


Более определённо: фиксация рекурсивности в процессе передачи знания. Любой передачи, в том числе, при обучении.

Пример: Фиксация факта разнонаправленности направлений поворота барашков смесителя экономит мне цену керамической кранбуксы при каждом приёме гостей.


Дальше о целях и глобальном контексте:
Цитата:
Одного мальчика спросили:

– Слушай, Вова, как ты можешь принимать рыбий жир? Это же так невкусно.

– А мне мама каждый раз, как я выпью ложечку рыбьего жира, дает гривенник,– сказал Вова.

– Что же ты делаешь с этим гривенником? – спросили Вову.

– А я кладу его в копилку,– сказал Вова.

– Ну, а потом что же? – спросили Вову.

– А потом, когда у меня в копилке накапливается два рубля,– сказал Вова,– то мама вынимает их из копилки и покупает мне опять бутылку рыбьего жира.

Даниил Хармс "Рыбий жир", 1935.


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

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1097
Откуда: Россия, Чебоксары
Дмитрий Колосов писал(а):
Более определённо: фиксация рекурсивности в процессе передачи знания. Любой передачи, в том числе, при обучении.
Вот и скажите более определённо - что такое рекурсивность?
Чьё это свойство? (подсказка - у процедуры нет такого свойства!)
Следуя подобной логике, можно потребовать включения в язык средств отображения численного интегрирования, решения СЛАУ и т.д. и т.п.
Конструктивно? Отнюдь!


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

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

Но я попробую продолжить логику: процедура с контекстом - это есть ни что иное, как метод объекта. Глобальный контекст можно тоже рассматривать как поля некого синглетона.
А рекурсия, это запуск некого процесса в новом контексте, и реентерабильность начинает выполняться, когда этот старый контекст не портится, а восстанавливается.
Отсюда мораль - рекурсия, это создание нового объекта, посылка ему некоторых сообщений (вызов методов), ну и восстановление статус-кво. В смысле: прием результатов и ликвидация этого объекта.

Ну вот, создание этого нового объекта (контекста, если хотите), с последующим возвратом к старому - и есть та самая загогулина, на которой и начинается рекурсивный заворот...
Ее и надо отвечать, выделять, фиксировать внимание....
Кажется.... Хотя конечно, немного со своей колокольни рассуждаю

P.S. А реентерабильность влияет на эффективность кода. И не слабо так влияет...


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

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 112
Откуда: Беларусь, Минск
Galkov писал(а):
процедура с контекстом - это есть ни что иное, как метод объекта. Глобальный контекст можно тоже рассматривать как поля некого синглетона.
Думаю, контекст нужно представлять не как объект, а как уровень.

То есть, брать шире. Обычно, происходит примерно так.
1. С уровня выше пришёл запрос на текущий уровень.
2. Здесь он начинает обрабатываться и в случае необходимости
3. отдаёт что-нибудь на вычисления более низкому уровню.

Что происходит в случае с обращением к рекурсивной процедуре? Рассмотрим обычную, не косвенную рекурсию.
1. С уровня выше происходит запрос на текущий, рекурсивный уровень.
2. Здесь запрос обрабатывается и, конечно же, обычно сразу вычисления не заканчиваются. Необходим переход на более низкий уровень для продолжения вычислений, которые на данном уровне невозможны.
3. После перехода на более низкий уровень оказывается, что мы через какую-то "дырку в мат. пространстве" провалились опять сюда же (на текущий уровень). Но провалились удачно: вычисления опять возможны, и после их завершения мы можем вернуть результат, который нужен непонятно для чего, наверх. То есть, сюда же, где назначение этого результата понятно.

Такой вот парадокс.

Но если приглядеться внимательней, то становится понятно: потенциала текущего уровня достаточно для полного удовлетворения запроса. Ведь, через "дырку" в измерении мы попадаем сюда же. Значит, можно организовать вычисления таким образом, что рекурсия будет не нужна. Возможно, самый наглядный способ - использовать многоветочный цикл, который в Драконе есть.

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

P.S. Кстати, насчёт "дырки в пространстве" каждый раз, когда я думаю о рекурсии в таком контексте, мне вспоминается бутылка Клейна (путешествуя по которой можно тоже попадать на старое место необычным способом). И появляется ощущение, что рекурсия делает из n-мерного пространства n+1-мерное. Оно нам надо?


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

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1097
Откуда: Россия, Чебоксары
Galkov писал(а):
процедура с контекстом - это есть ни что иное, как метод объекта.
Вы знаете, очень не хотелось бы приплетать сюда теоретические построения по поводу объектов... То есть, конечно, и процедуру можно рассматривать как объект (самостоятельную сущность), но наш анализ это вряд ли упростит и вряд ли будет сильно полезно... имхо...

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

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

2 Илья Ермаков: А кто-нибудь вообще думал на тему гомеоморфности управляющих структур алгоритмов?


Galkov писал(а):
рекурсия, это создание нового объекта, посылка ему некоторых сообщений (вызов методов), ну и восстановление статус-кво. В смысле: прием результатов и ликвидация этого объекта.
В принципе это так... Великая вещь - инкапсуляция! Мы даже не обязаны подозревать наличие контекста... как и объекта... Дёрнули за верёвочку - получили результат. Всё!

Galkov писал(а):
Ну вот, создание этого нового объекта (контекста, если хотите), с последующим возвратом к старому - и есть та самая загогулина, на которой и начинается рекурсивный заворот...
Ее и надо отвечать, выделять, фиксировать внимание....
Вот именно и не надо, поскольку есть инкапсуляция!
Надо выделять только в отдельном частном случае - когда верёвочка перепутана с другими (глобальный контекст).

Galkov писал(а):
P.S. А реентерабильность влияет на эффективность кода. И не слабо так влияет...
Никак не влияет. :) Если взять, скажем, писюк и процедуру с локальными переменными, то даже стек фрейм не сэкономишь!
Да и вообще, какие такие особенные усилия нужны для обеспечения реентерабельности?
Да, естественно, если писать на ассемблере, то придётся регистры сохранять и т.д...

Но наш разговор не о машинной реализации, а о представлении алгоритма, разве не так?
Поэтому что удобнее, то и надо использовать.

Ясен пень, что проекция итерационного алгоритма на цикл в машинной реализации гораздо эффективнее, чем рекурсивные процедуры :) НО! ПОКУДА СТРУКТУРЫ ГОМЕОМОРФНЫ, ЭТО НЕ НАШЕ ДЕЛО! (а дело оптимизирующего кодогенератора).


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

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1097
Откуда: Россия, Чебоксары
Valery Solovey писал(а):
Думаю, контекст нужно представлять не как объект, а как уровень.
В общем-то, можно и как уровень рассмотреть - но это будет очень частный случай! Инкапсуляция локального контекста - вот принципиальный момент.


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

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 631
Откуда: Россия, Орёл
Alexey_Donskoy писал(а):
2 Илья Ермаков: А кто-нибудь вообще думал на тему гомеоморфности управляющих структур алгоритмов?


viewtopic.php?f=61&t=2140&p=38816


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

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 112
Откуда: Беларусь, Минск
Alexey_Donskoy писал(а):
Инкапсуляция локального контекста - вот принципиальный момент.
Правильно. И уровень эту инкапсуляцию и обеспечивает. И будет не частнее представления с помощью объектов.


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

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1097
Откуда: Россия, Чебоксары
Valery Solovey писал(а):
уровень эту инкапсуляцию и обеспечивает. И будет не частнее представления с помощью объектов.
В уровне может быть сколько угодно горизонтальных связей, несовместимых с инкапсуляцией (нарушающих её). Так что это другая абстракция, не являющаяся здесь адекватной. Она не хуже, эта абстракция, она просто из другой задачи! :D


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

Зарегистрирован: Вторник, 11 Август, 2009 11:44
Сообщения: 42
Откуда: Бердск
Парни, ну Вы и наворотили :shock:
Сегодня я уже точно не въеду. Завтра еще может попробую...
Но есть у меня серьезные подозрения, что фиг Вам удастся природу обмануть, хоть с бутылкой Клейна, хоть с какой другой :D

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


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

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


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

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


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

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