En Iterar a través de todas las combinaciones de valores del número ARBITRARIO de listas Publiqué una respuesta que requería insertar una lista en otra lista de listas. La función InsertInto descomprime la lista insertada en elementos, que no es lo que quiero. Usé una declaración de asignación para el elemento uno más allá del final de la lista, que inserta la lista como un elemento. Otra opción es envolver la lista en otra lista antes de insertarla (para que descomprima la lista envuelta e inserte el original).
¿Existe una mejor manera de insertar una lista en una lista? result yp son listas.
resultado [ N artículos ( resultado ) + 1 ] = pag es un poco prolijo pero funciona y parece bastante claro que p se almacena justo después del último elemento de la lista. Bueno para extender, pero no se puede insertar en ningún otro lugar.
resultado = {"a"};
p = {"b", "c"};
resultado [N elementos (resultado) + 1] = p; // prolijo, pero la intención es clara
Mostrar resultado);
/ *:
resultado = {"a B C"}}; // bien
Insertar en (resultado, p) no funcionará porque inserta elementos de p, no p.
resultado = {"a"};
p = {"b", "c"};
insertinto (resultado, p); // se ve bien, pero ...
Mostrar resultado);
/ *:
resultado = {"a B C"}; // no es lo que quiero
insertinto (resultado, evallist ({p})) funciona, pero parece menos legible que la tarea. Se puede insertar en cualquier lugar, pero hace una copia adicional.
resultado = {"a"};
p = {"b", "c"};
insertinto (resultado, evallist ({p})); // hace una copia adicional de la lista y es difícil de leer
Mostrar resultado);
/ *:
resultado = {"a B C"}}; // bueno: lo que quiero
FWIW Siempre lo hago de la forma EvalList () en su segundo ejemplo. Supongo que podrías hacerlo de esta manera, y no evaluar hasta que quieras / necesites ... no estoy seguro de si esto te está comprando mucho (?)
result = {"a"};
p = {"b", "c"};
Insert Into( result, {p} ); //don't evaluate p here... but of course p is non-static
show(result[2][1]); //can still access elements of p if desired
Show( Eval List( result ) ); //or can eval to see the whole thing

No es una solución directa, pero más como una solución, tiendo a usar matrices asociativas, similar a lo que @pmroz sugerido en su enlace.
Podría usar eso la próxima vez. Parece más simple, incluso si está usando una estructura de datos más complicada (debajo de las cubiertas), y como ya estoy generando un índice con nitems (...) + 1 ... sí, podría ser la mejor opción.
Si. He usado el enfoque evallist () y siempre siento que necesita un comentario para explicarlo. En mi código original (enlace en la parte superior) sigo cambiando p entre inserciones, por lo que no puede simplemente insertar una referencia a p.