Re: More general Cartesian product
I have a need for a Cartesian product of multiple ranges. I see there's been a discussion here (Dec 2011) as well as a request posted (#7128). It seems to me that the request deals with a multidimensional product -- which is what I need -- while the implementation by Timon Gehr deals only with the two-dimensional case. I have one in a dsource project: http://www.dsource.org/projects/dranges It's in the algorithm.d module, look for 'combinations' Docs are there: http://svn.dranges.org/projects/dranges/trunk/dranges/doc/algorithm.html For a generalization of this, you may want to have a look into the rangeofranges.d module (docs: same than algorithm, or click on the 'package' tab on the left). I think a .zip is given on the main page. Alternatively, it's also on github: www.github.com/PhilippeSigaud/dranges
Re: More general Cartesian product
On 2012-02-29 14:24:36 +, Philippe Sigaud said: [snip] Thanks for the response. In the meantime, I also hacked together a simple version of what I needed (see below), but I'll look into the references you provided as well :) void forall(alias func, size_t lvl=0, T...)(T args) { static if (lvl == args.length) { func(args); } else { foreach (e; args[lvl]) { forall!(func, lvl+1) (args[0..lvl], e, args[lvl+1..$]); } } } -- Magnus Lie Hetland http://hetland.org