Что означает «эта функция срастется»? - PullRequest
13 голосов
/ 18 мая 2011

В документации для scanl написано "эта функция перегорит".Что именно означает fuse здесь?Это плохо?

Ответы [ 3 ]

13 голосов
/ 18 мая 2011

http://www.haskell.org/haskellwiki/Short_cut_fusion

(и, для получения дополнительной информации: http://www.haskell.org/haskellwiki/Correctness_of_short_cut_fusion)

Если функция перегорит, это хорошо. Это означает, что цепочка функций может быть объединена в одну функцию, что означает меньшее распределение, меньший стек и большую скорость! Отлично!

Вот тривиальный синтез: map f . map g ----> map (f . g).

Как подробно описано выше, существует множество других, которые также применяются в ПРАВИЛАХ стандартной библиотеки.

3 голосов
/ 18 мая 2011

Это похоже на сопрограммы - если вы составляете две функции, которые они могут выполнять в объединенном потоке, вместо того, чтобы одну полностью «оценивать» сначала, а затем вторую.

Что такое Stream Fusion Haskell

2 голосов
/ 18 мая 2011

Я предполагаю, что это относится к методам оптимизации объединения потоков и утверждает, что они могут быть применены к функции.По сути, если у вас есть две функции, которые преобразуют последовательности, оптимизатор объединит преобразования, так что требуется только один обход.

Короче говоря, нет, это неплохо.Совсем наоборот!

...