En Iterar a través de todas las combinaciones de valores de un número ARBITRARIO de listas Publiqué una respuesta que requería insertar una lista en otra lista de listas. La función InsertInto desempaqueta la lista insertada en elementos, que no es lo que quiero. Usé una declaración de asignación al 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 la original).
¿Hay una mejor manera de insertar una lista en una lista? resultado y p son ambas 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 los elementos de p, no de p.
resultado={"a"};
p={"b","c"};
insertaren(resultado, p); // se ve bien, pero...
Mostrar resultado);
/*:
resultado = {"a B C"}; // no es lo que quiero
insertar en (resultado, lista de evaluación ({ 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"};
insertar en (resultado, lista de evaluación ({ p } ) ) ; // hace una copia extra de la lista y es difícil de leer
Mostrar resultado);
/*:
resultado = {"a B C"}}; // bueno: lo que quiero
editar: luego encontré
Insertar lista a lista con JSL que es la misma pregunta. Parecen respuestas similares, inclinándose hacia el enfoque evaluador.
Sí. 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.
Podría usar eso la próxima vez. Parece más simple, incluso si usa una estructura de datos más complicada (encubierta), y dado que ya estoy generando un índice con nitems(...)+1 ... sí, podría ser la mejor opción.
No es una solución directa, sino más bien una solución. Tiendo a usar matrices asociativas, similar a lo que @pmroz sugerido en su enlace.
FWIW Siempre lo hago de la manera EvalList () en su segundo ejemplo. Supongo que podrías hacerlo de esta manera, y no evaluar hasta que quieras / necesites... no estoy seguro 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
