Добрый вечер, Антон!
«Вообще, на мой взгляд, $iter оправдан по двум причинам:
1) Ситуации, когда рекурсия по сути хвостовая, но не является таковой из-за 
смежных конкатенаций: (e1 <F e2>)»
Тут решает векторно-списковое представление Скоробогатова. Позже о нём напишу 
отдельным письмом. 
«2) Отсутствие вложенных функций/замыканий. Выносить каждый простой внутренний 
цикл во внешнюю функцию (передавая туда все нужные локальные переменные) — 
слишком тяжеловесно.»
Как пользователь Рефала с замыканиями, могу подтвердить. Наиболее частые 
циклические задачи — обход последовательности с преобразованием и/или с 
агрегацией. Для этой цели очень удобно использовать функции Map, MapAccum и 
Reduce, передавая в них замыкание. Но в плане быстродействия это дорого, дороже 
вручную написанной хвостовой рекурсии. А $iter’а у меня нет.
 
С уважением,
Александр Коновалов
 
From: Anton Orlov orlovan_AT_gmail.com <refal@botik.ru> 
Sent: Saturday, March 2, 2019 10:39 AM
To: refal@botik.ru
Subject: Re: Сравнение веток Рефала
 
On Fri, Mar 1, 2019 at 4:08 AM Sergei M. Abramov abram_AT_botik.ru 
<refal@botik.ru <mailto:refal@botik.ru> > wrote:
День добрый, Антон, Юра!

Я там как-то невнимательно следил.

1.  Р+ с $iter должен быт лучше (не хуже) чем рекурсия.  Но не сильно
(хвостовая рекурсия мало уступает $iter).
 
$iter не хуже, чем хвостовая рекурсия. Но, конечно, может быть хуже, если 
пытаться выразить не хвостовую рекурсию и эмулировать стек на рефал-выражениях, 
например.
 
Вообще, на мой взгляд, $iter оправдан по двум причинам:
1) Ситуации, когда рекурсия по сути хвостовая, но не является таковой из-за 
смежных конкатенаций: (e1 <F e2>)
2) Отсутствие вложенных функций/замыканий. Выносить каждый простой внутренний 
цикл во внешнюю функцию (передавая туда все нужные локальные переменные) -- 
слишком тяжеловесно.
 
2.  Р+ с рекурсией не должен жрать стек (точнее, жрать и освобождать
сразу, так как хвостовая).

Так и есть?  А если не так, то поясните, плз.
 
Так и есть.
 
Антон
 

Всего доброго,

Сергей Абрамов
            • ... 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
      • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
        • ... Eisymont Leonid verger-lk_AT_yandex . ru
          • ... Александр Коновалов a . v . konovalov87_AT_mail . ru

Ответить