metaclass: (Default)
[personal profile] metaclass
Читаю про катаморфизмы и FSharp. Вообще, изначально это я искал ответ на этот вопрос, но зачитался и забыл.

Там приводится пример, как выразить foldBack (оно же foldr) через fold(оно же foldl) с помощью continuations. И выглядит это как будто мы заменяем использование стека в случае не-tail-recursive функции таким же использованием памяти из head. Причем в случае стека выделение и удаление памяти достаточно дешевое, а вот что будет в случае обычной памяти - вопрос загадочный. Непонятно, есть ли тогда какие-нибудь преимущества у такого преобразования не-tail-recursive функции в tail-recursive?

Date: 2010-09-13 08:34 pm (UTC)
From: [identity profile] gds.livejournal.com
но на стеке -- быстрее, поэтому стандартный List.map выигрывает по скорости у алгоритма, выделяющего на хипе и далее небезопасно (Obj) меняющего cons cell. (хотя, в целом, всё получается безопасно, кодэ см. в extLib.)
Собственно, потому и не меняют List.map в stdlib, что текущая версия на мелких списках чудо как хороша. (а именно, с текущим мусорщиком лучше не сделать.)
А для больших объёмов рекомендуют не списки, а что-то побыстрее.

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 6th, 2025 03:51 pm
Powered by Dreamwidth Studios