Можно ли построить рекурсивный генератор в стиле Python с помощью Elixir? Примерно так:
def traverse(parent_dir):
dirs, files = get_dirs_and_files_as_lists(parent_dir)
for d in dirs:
yield from traverse(d)
for f in files:
yield f
Для всех файлов, которые будут обрабатываться линейно, без накладных расходов, вытекающих из нетерпеливого списка неопределенной длины:
for f in traverse(dir):
process(f)
Это, или какой-то рабочий эквивалент, должно быть возможно с использованием потоков; к сожалению, я понятия не имею, как.
Я хочу что-то вроде этого, просто ленивый:
def traverse_eagerly(parent_dir) do
{dirs, files} = get_dirs_and_files_as_lists(parent_dir)
for x <- dirs do
traverse_eagerly(x)
end
|> Enum.concat()
|> Enum.concat(files)
end