Qualcuno può suggerire una soluzione a questo.
Ho più elenchi. Devo scorrere tutte le possibili combinazioni di valori da questi elenchi. Il problema è che il numero di elenchi da cui prendo valori viene deciso in fase di esecuzione. Quindi non posso scrivere due cicli "for" annidati per due elenchi e poi tre cicli "for" annidati per tre elenchi. Ho bisogno in qualche modo di passare \ parse i nomi degli elenchi (probabilmente come un elenco stesso) e quindi scorrere tutti gli elenchi \ valori negli elenchi.
Qualche idea?
Non sono sicuro di quanto possa andare in profondità prima che JMP pensi che la tua ricorsione sia troppo profonda, quindi prova prima ... Se hai troppe liste, c'è una soluzione leggermente meno carina usando uno stack. Ma se ogni elenco ha almeno due elementi, penso che prima finirai il tempo.
// 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 );risultato = {
{"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"}
};