¿Alguien puede sugerir una solución a esto?
Tengo varias listas. Necesito iterar a través de todas las posibles combinaciones de valores de estas listas. El problema es que la cantidad de listas de las que estoy tomando valores se decide en tiempo de ejecución. Por lo tanto, no puedo escribir dos bucles "for" anidados para dos listas y luego tres bucles "for" anidados para tres listas. De alguna manera necesito pasar \ analizar los nombres de las listas (probablemente como una lista en sí) y luego iterar a través de todas las listas \ valores en las listas.
¿Algunas ideas?
No estoy seguro de cuán profundo puede llegar esto antes de que JMP piense que su recursión es demasiado profunda, así que pruebe primero ... Si tiene demasiadas listas, hay una solución un poco menos bonita usando una pila. Pero si cada lista tiene al menos dos elementos, creo que primero se te acabará el tiempo.
// 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 );resultado = {
{"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"}
};