Im Durchlaufen Sie alle Wertekombinationen aus der ARBITRARY-Anzahl der Listen Ich habe eine Antwort gepostet, bei der eine Liste in eine andere Liste von Listen eingefügt werden musste. Die InsertInto-Funktion entpackt die eingefügte Liste in Elemente, was nicht das ist, was ich will. Ich habe eine Zuweisungsanweisung für das Element jenseits des Listenendes verwendet, die die Liste als Element einfügt. Eine andere Möglichkeit besteht darin, die Liste vor dem Einfügen in eine andere Liste zu verpacken (damit die verpackte Liste entpackt und das Original eingefügt wird).
Gibt es eine bessere Möglichkeit, eine Liste in eine Liste einzufügen? Ergebnis und p sind beide Listen.
Ergebnis [ N Artikel (( Ergebnis ) + 1 ]] = p ist ein bisschen wortreich, funktioniert aber und scheint ziemlich klar zu sein, dass p direkt nach dem letzten Element in der Liste gespeichert wird. Gut zum Erweitern, kann aber nirgendwo anders eingesetzt werden.
Ergebnis = {"a"};
p = {"b", "c"};
Ergebnis [N Elemente (Ergebnis) + 1] = p; // wortreich, aber die Absicht ist klar
zeige Ergebnis);
/ *:
Ergebnis = {"a", {"b", "c"}}; // gut
Insertinto (Ergebnis, p) funktioniert nicht, weil es die Elemente von p einfügt, nicht p.
Ergebnis = {"a"};
p = {"b", "c"};
Insertinto (Ergebnis, p); // sieht richtig aus, aber ...
zeige Ergebnis);
/ *:
Ergebnis = {"a", "b", "c"}; // nicht was ich will
insertinto (Ergebnis, evallist ({p})) funktioniert, scheint aber weniger lesbar als die Aufgabe. Kann überall eingefügt werden, erstellt jedoch eine zusätzliche Kopie.
Ergebnis = {"a"};
p = {"b", "c"};
insertinto (Ergebnis, evallist ({p})); // macht eine zusätzliche Kopie der Liste und ist schwer zu lesen
zeige Ergebnis);
/ *:
Ergebnis = {"a", {"b", "c"}}; // gut: was ich will
FWIW Ich mache es immer wie in Ihrem zweiten Beispiel nach EvalList (). Ich denke, Sie könnten es auf diese Weise tun und nicht bewerten, bis Sie wollen / müssen ... nicht sicher, ob dies Ihnen viel kostet (?)
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

Keine direkte Lösung, sondern eher eine Problemumgehung. Ich verwende eher assoziative Arrays, ähnlich wie was @pmroz in Ihrem Link vorgeschlagen.
Ich könnte das nächste Mal verwenden. Es sieht einfacher aus, selbst wenn es eine kompliziertere (unter dem Deckmantel) Datenstruktur verwendet, und da ich bereits einen Index mit nitems (...) + 1 ... generiere, ist es möglicherweise die bessere Wahl.
Ja. Ich habe den evallist()-Ansatz verwendet und habe immer das Gefühl, dass ein Kommentar zur Erklärung erforderlich ist. In meinem ursprünglichen Code (Link oben) ändere ich p zwischen den Einfügungen, sodass nicht einfach ein Verweis auf p eingefügt werden kann.