Обновление: это не об использовании Фибоначчи.Этот вопрос о том, как правильно понять поток.
Для генерации серии / суммы Фибоначчи:
defmodule Fib do
def dofib(0), do: []
def dofib(n) when is_integer(n), do: dofib(0, 1, n-1)
def dofib(cur, _, 0), do: [cur]
def dofib(cur, next, count), do: [cur] ++ dofib(next, cur+next, count-1)
end
# 10000 |> Fib.dofib |> List.foldl(0, &(&1 + &2))
Это может работать <100K. </p>
Какие оптимизации или дездесь возможен беспорядок?:
Stream.unfold([1, 0], fn([h|t]=acc)-> {h, [h + List.first(t)|acc]} end)
|> Stream.take(100000)
|> Flow.from_enumerable
|> Flow.partition(stages: 100)
|> Flow.reduce(fn -> 0 end, fn(n, acc)-> n + acc end)
|> Flow.departition(fn -> 0 end, &(&1 + &2), &(&1))
|> Stream.into(File.stream!("output.txt", [:delayed_write, encoding: :utf8]))
|> Stream.run
Сбой при 200K.