Quelqu'un peut-il suggérer une solution à cela.
J'ai plusieurs listes. Je dois parcourir toutes les combinaisons possibles de valeurs à partir 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 \ analyser les noms des listes (probablement en tant que liste elle-même), puis de parcourir toutes les listes \ valeurs dans les 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 existe une solution un peu moins jolie en utilisant une pile. Mais si chaque liste contient au moins deux éléments, je pense que vous allez d'abord manquer de temps.
// 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", "je"},
{"a", "c", "e", "j"},
{"a", "c", "f", "g"},
{"a", "c", "f", "h"},
{"a", "c", "f", "je"},
{"a", "c", "f", "j"},
{"b", "c", "d", "g"},
{"b", "c", "d", "h"},
{"b", "c", "d", "je"},
{"b", "c", "d", "j"},
{"b", "c", "e", "g"},
{"b", "c", "e", "h"},
{"b", "c", "e", "je"},
{"b", "c", "e", "j"},
{"b", "c", "f", "g"},
{"b", "c", "f", "h"},
{"b", "c", "f", "je"},
{"b", "c", "f", "j"}
} ;