リストの最後のデータがより重要で、最初の順序を維持しながら:partialリストをリストの最初に残したい場合は、次のようにします。
> my @a = (0,1,2,3,4,5,6,7,8,9);
[0 1 2 3 4 5 6 7 8 9]
> say @a.rotor(4, :partial)
((0 1 2 3) (4 5 6 7) (8 9)) # not what I want; important data at end gets cut off;
> say @a.reverse.rotor(4, :partial).reverse.map({$_.reverse});
((0 1) (2 3 4 5) (6 7 8 9)) # this is what I want
3つの「逆」操作を回避する方法はありますか? :fromEnd副詞を追加することは可能ですか?
:partial
リストに残っている要素の数を計算できます。
@a.elems % 4
次に、それを必要なサイズの繰り返しシーケンスと組み合わせます。
4 xx *
あなたがそれらを組み合わせようとした場合、それは単に機能しません
@a.elems % 4, 4 xx *
上記は2つの要素のリストであるためです。最初はモジュラス演算の結果であり、2番目は無限シーケンスです。
flat
を使用して、それらを単一のシーケンスにすることができます。
flat @a.elems % 4, 4 xx *
これが結果のコードです。
@a.rotor( flat @a.elems % 4, 4 xx * )