the range type
A forward range of elements of which are an std.range.indexed view into r.
Note: The elements of the resulting range reuse the same internal buffer of permutations, so each element is invalidated by popFront. If copies of intermediate permutations are desired, they need to be individually copied, such as using .map!(e => e.array) to save them in individual, independent arrays.
import std.algorithm.comparison : equal; import std.range : iota; assert(equal!equal(iota(3).permutations, [[0, 1, 2], [1, 0, 2], [2, 0, 1], [0, 2, 1], [1, 2, 0], [2, 1, 0]]));
Lazily computes all permutations of r using Heap's algorithm.