Это небольшая функция продукта, которая преобразует список констант, список операторов и другой список констант в Julia Expr
.Функция работает для небольших наборов констант, однако для получения большего списка из 100 констант и 5 операторов функция генерирует StackOverflow.
function applyProduct(left, operators, right)
prod = Iterators.product(left, operators, right)
prod = Iterators.vcat(prod...)
return Iterators.map(x -> Expr(:call, Symbol(x[2]), Symbol(x[1]), Symbol(x[3])), prod)
end
Моя функция взрывается при функции vcat:
ERROR: LoadError: StackOverflowError:
Stacktrace:
[1] promote_eltypeof(::Tuple{String,typeof(+),Expr}, ::Tuple{String,typeof(+),Expr}, ::Vararg{Any,N} where N) at .\abstractarray.jl:1211 (repeats 8406 times)
[2] _cat(::Val{1}, ::Tuple{String,typeof(*),Expr}, ::Vararg{Any,N} where N) at .\abstractarray.jl:1382
[3] #cat#104(::Val{1}, ::Function, ::Tuple{String,typeof(*),Expr}, ::Vararg{Any,N} where N) at .\abstractarray.jl:1511
[4] (::getfield(Base, Symbol("#kw##cat")))(::NamedTuple{(:dims,),Tuple{Val{1}}}, ::typeof(cat), ::Tuple{String,typeof(*),Expr}, ::Vararg{Any,N} where N) at .\none:0
[5] vcat(::Tuple{String,typeof(*),Expr}, ::Tuple{String,typeof(*),Expr}, ::Tuple{String,typeof(*),Expr}, ::Vararg{Any,N} where N) at .\abstractarray.jl:1449
Это ошибка переполнения стека, поэтому данные каким-то образом хранятся в стеке.Должен ли я объявить что-то, чтобы сохранить это в памяти?
Я хотел бы применить эту операцию к большим наборам констант.Может быть, я не использую самый эффективный подход.