Функции без оптимизации хвостовой рекурсии в библиотеке
От: CodingUnit Россия  
Дата: 17.11.11 15:39
Оценка: 1 (1) +1
Заметил то что в библиотеке Немерле, используются некоторые функции без оптимизации хвостовой рекурсии, например:

FoldRight на списке из 50000 элементов убивает стэк, это дело можно переписать с помощью continuations, но это будет чуть медленее, думаю что скажет сообщество, может сделать отдельные варианты функций но с TCO, или переписать оригинальные.

Сравнительные показатели, FoldRight c continuations:
  public FoldRight[T, TOut] (this l : list [T], acc : TOut, f : T * TOut -> TOut) : TOut 
  {
    def loop(l, cont)
    {
      match (l)
      {
        | x :: xs => loop(xs, racc => cont(f(x, racc)))
        | []      => cont(acc)
      }
    }
    
    loop(l, x => x)
  }


в сравнении с FoldRight из библиотеки, не убивает стэк, TCO, но показатели следующие на 10000 элементов операция
def res = lst.FoldRight(0, (x, a) => x * 3 + a);


старая новая


61074 79434
61569 74705
61938 75744
62024 75350

С остальными наверное похожие показатели, что посоветует сообщество?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.