Можете ли вы сделать что-то вроде выражения Python yield
в Mathematica для создания генераторов? Смотрите, например, здесь для концепции.
Обновить Вот пример того, что я имею в виду, чтобы перебрать все перестановки, используя только пространство O(n)
: (алгоритм как в книге Sedgewick Algorithms):
gen[f_, n_] := Module[{id = -1, val = Table[Null, {n}], visit},
visit[k_] := Module[{t},
id++; If[k != 0, val[[k]] = id];
If[id == n, f[val]];
Do[If[val[[t]] == Null, visit[t]], {t, 1, n}];
id--; val[[k]] = Null;];
visit[0];
]
Тогда назовите это как:
gen[Print,3]
, печать всех 6 перестановок длины 3.