Все это верно, но это же не имеет отношения к примеру о цепочках из
учебника по Р+. Рекурсия там - не хвостовая. И как писал Юра (26.02):
<<<
Пример с двумя iter из документации в приложении. Требует heap'а чуть
поменьше (1ГБ против 2ГБ). Считает 10.5 секунд.
>>>
Значит, все-таки требует ГБ heap-a. А для чего? Не для стека ли? Не
буквально на стек, конечно, но на значения переменной e.String, "ссылаемые"
из стека. Так? Но эти выражения ведь просто растут в одну сторону вместе со
стеком. А почему же тогда здесь не получается их создавать на одном общем
массиве "с открытым концом"? В варианте EX2 ровно это фактически и
происходит. Значит, в принципе возможно. А почему не получается "само"?
Хотелось бы понять, что там на самом деле происходит (с "дырками"
слева-справа) и что мешает. И возможно ли это преодолеть в автоматическом
режиме.
Аркадий

сб, 2 мар. 2019 г. в 09:39, Anton Orlov orlovan_AT_gmail.com <refal@botik.ru
>:

> On Fri, Mar 1, 2019 at 4:08 AM Sergei M. Abramov abram_AT_botik.ru <
> refal@botik.ru> wrote:
>
>> День добрый, Антон, Юра!
>>
>> Я там как-то невнимательно следил.
>>
>> 1.  Р+ с $iter должен быт лучше (не хуже) чем рекурсия.  Но не сильно
>> (хвостовая рекурсия мало уступает $iter).
>>
>
> $iter не хуже, чем хвостовая рекурсия. Но, конечно, может быть хуже, если
> пытаться выразить не хвостовую рекурсию и эмулировать стек на
> рефал-выражениях, например.
>
> Вообще, на мой взгляд, $iter оправдан по двум причинам:
> 1) Ситуации, когда рекурсия по сути хвостовая, но не является таковой
> из-за смежных конкатенаций: (e1 <F e2>)
> 2) Отсутствие вложенных функций/замыканий. Выносить каждый простой
> внутренний цикл во внешнюю функцию (передавая туда все нужные локальные
> переменные) -- слишком тяжеловесно.
>
>
>> 2.  Р+ с рекурсией не должен жрать стек (точнее, жрать и освобождать
>> сразу, так как хвостовая).
>>
>> Так и есть?  А если не так, то поясните, плз.
>>
>
> Так и есть.
>
> Антон
>
>
>>
>> Всего доброго,
>>
>> Сергей Абрамов
>>
>>

-- 
_______________
*С уважением, *
*Аркадий Климов,*
*с.н.с. ИППМ РАН,*
*+7(499)135-32-95*
*+7(916)072-81-48*
            • ... Sergei M. Abramov
            • ... Arkady Klimov arkady . klimov_AT_gmail . com
            • ... Sergei M. Abramov
            • ... Andrei Klimov andrei_AT_klimov . net
            • ... Eisymont Leonid verger-lk_AT_yandex . ru
            • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
            • ... Anton Orlov orlovan_AT_gmail . com
            • ... Arkady Klimov arkady . klimov_AT_gmail . com
            • ... Anton Orlov orlovan_AT_gmail . com
            • ... Sergei M. Abramov
            • ... Arkady Klimov arkady . klimov_AT_gmail . com
            • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
            • ... Arkady Klimov arkady . klimov_AT_gmail . com
            • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
            • ... Arkady Klimov arkady . klimov_AT_gmail . com
            • ... Arkady Klimov arkady . klimov_AT_gmail . com
            • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
  • Re:... Andrei Klimov andrei_AT_klimov . net
    • ... Sergei M. Abramov
  • Re[... Александр Гусев gusev_aleksandr_AT_mail . ru
    • ... Eisymont Leonid verger-lk_AT_yandex . ru

Ответить