Kurz: Ist es möglich, sämtliche 1D-Arrays, die in einem 2D-Array stehen durch ein X zu kombinieren? Sowas wie
my @x = [1,2],[3,4],5;
[X]@x;
was nicht geht, weil [] ja immer eine Reduktion zu einem skalaren Wert darstellt (oder?).
Lang: Ich hab einen 2D-Array, bei dem jeder 1D-Array verschiedene Möglichkeiten für die Stelle in der er im Gesamtarray steht repräsentiert. (Z.B. auf Platz 0 liegt ein Apfel, auf Platz 1 ein Apfel, oder eine Pflaume,... -> ['Apfel'],['Apfel','Pflaume'],...)
Jetzt will ich in einer Funktion die "beste" Kombination von Obst rausfinden, d.h. sämtliche Kombinationen erstellen und vergleichen. Mein gedachtes Script sähe so aus:
my @x = [1,2],[0,1,2],3,[2,3];
my $alte_bewertung = 0;
for [X]@x -> @kombination {
my $aktuell = funktion(@kombination);
if $aktuell > $alte_bewertung {@x = @kombination; $alte_bewertung = $aktuell}
}
Zum einen stimmt das [X] nicht. Ich weiß nicht, ob es überhaupt möglich ist, das so zusammenzufassen, vorerst werd ich es mal umgehen. Zum anderen weiß ich nicht genau, ob ich das @x in der for-Schleife ändern dürfte, ohne, dass es sich auf die Schleife auswirkt - ich denke, aber schon, über welche Elemente iteriert wird, wird bestimmt nur einmal, am Anfang festgelegt.
Wär ziemlich hübsch, das so kurz schreiben zu können. :)
Nebenbei - warum ist man in perl6 von der Unterscheidung von Arrays und Skalaren durch @ und $ abgerückt? In perl5 war einem (mir) dadurch oft viel bewusster, was eigentlich grad passiert. In perl6 ist das manchmal etwas schwammig - generell scheint es oft ganz egal, ob man ein $, oder ein @ nimmt, wenn die gespeicherte Referenz eh fast immer (gefühlsmäßig) automatisch als Array benutzt wird.