Écrivez avec macro_rules! une macro cartesian qui prend en paramètre deux expressions implémentant respectivement IntoIterator<T> et IntoIterator<U>, avec T: Clone et U: Clone. La macro devra s'évaluer en un itérateur sur des objets de types (T, U) avec toutes les combinaisons possibles en provenance des deux itérateurs en faisant varier plus rapidement l'expression la plus à droite.
Étendez cette macro pour qu'elle puisse prendre trois expressions en plus de deux, les expressions à gauche variant plus lentement que les expressions à droite.