Quelqu'un peut-il suggérer une solution à cela.
J'ai plusieurs listes. Je dois parcourir toutes les combinaisons possibles de valeurs de ces listes. Le problème est que le nombre de listes dont je prends des valeurs est décidé au moment de l'exécution. Je ne peux donc pas écrire deux boucles «for» imbriquées pour deux listes, puis trois boucles «for» imbriquées pour trois listes. J'ai besoin d'une manière ou d'une autre de passer \ parse les noms des listes (probablement sous forme de liste elle-même), puis de parcourir toutes les listes \ valeurs des listes.
Des idées?
Je ne sais pas jusqu'où cela peut aller avant que JMP ne pense que votre récursivité est trop profonde, alors testez d'abord ... Si vous avez trop de listes, il y a une solution de contournement un peu moins jolie en utilisant une pile. Mais si chaque liste comporte au moins deux éléments, je pense que vous manquerez de temps en premier.
// the variable length list of variable length lists
L = {{"a", "b"}, {"c"}, {"d", "e", "f"}, {"g", "h", "i", "j"}};
result = {}; // a place to accumulate the results
p = {}; // a single result
// a recursive function to "nest the for loops"
generate = Function( {i}, // the "layer"
{j}, // the local for-loop counter
If( i > N Items( L ),
result[N Items( result ) + 1] = p; // you could just use p at this point
Return();
);
For( j = 1, j <= N Items( L[i] ), j += 1, // go through all the items at this layer
Insert Into( p, L[i][j] ); // add each to the single result
Recurse( i + 1 ); // go to next layer
Remove From( p ); // remove from the single result
);
);
generate( 1 ); // run the recursive function
Show( result );résultat = {
{"a", "c", "d", "g"},
{"a", "c", "d", "h"},
{"a", "c", "d", "i"},
{"a", "c", "d", "j"},
{"a", "c", "e", "g"},
{"a", "c", "e", "h"},
{"a", "c", "e", "i"},
{"a", "c", "e", "j"},
{"a", "c", "f", "g"},
{"a", "c", "f", "h"},
{"a", "c", "f", "i"},
{"a", "c", "f", "j"},
{"b", "c", "d", "g"},
{"b", "c", "d", "h"},
{"b", "c", "d", "i"},
{"b", "c", "d", "j"},
{"b", "c", "e", "g"},
{"b", "c", "e", "h"},
{"b", "c", "e", "i"},
{"b", "c", "e", "j"},
{"b", "c", "f", "g"},
{"b", "c", "f", "h"},
{"b", "c", "f", "i"},
{"b", "c", "f", "j"}
};