朱莉娅 - n -nested循环



im试图在朱莉娅

中制作一个n-nest的循环方法
function fun(n::Int64)
    @nloops n i d->1:3 beginn
        @nexprs n j->(print(i_j))n
    end
end

但是@nloops的定义仅限于

_nloops(::Int64, ::Symbol, ::Expr, ::Expr...)

我得到了错误

_nloops(::Symbol, ::Symbol, ::Expr, ::Expr)

有什么办法可以做这项工作?任何帮助都非常感谢

编辑:

我最终做的是使用组合方法

为了解决我的问题,我需要获取所有的k组索引来从数组中提取值,因此循环必须看起来像

for i_1 in 1:100
    for i_2 in i_1:100
        ...
           for i_k in i_[k-1]:100

循环数需要是一个编译时常数 - 实际上是数字字面的:为函数体系生成的代码不能取决于函数参数。Julia的生成功能也无济于事,因为n只是一个普通价值,而不是任何参数类型的一部分。嵌套循环数量的最佳选择取决于n这样的运行时值。

在Julia-0.4及更高版本中,您现在可以执行此操作:

function fun(n::Int)
    for I in CartesianRange(ntuple(d->1:3, n))
        @show I
    end
end

在大多数情况下,您不需要基础。Cartesian宏(尽管仍然有一些例外)。值得注意的是,正如Stefankarpinski的答案中所述,此循环不会是"类型稳定",因为n不是编译时常数。如果性能很重要,则可以使用"功能障碍技术"。有关与这些问题相关的所有主题的更多信息,请参见http://julialang.org/blog/2016/02/iteration。

相关内容

  • 没有找到相关文章

最新更新