Re: [better solution] pairs of separators from a string

2021-09-20 Thread William Michels via perl6-users
>>>>Search String: "I like (parens) and the Apple ][+" they said.

(above quote from the posted question).

Yary, you could have written that! --B.


On Mon, Sep 20, 2021 at 7:53 AM yary  wrote:
>
> See Challenge #2 in 
> https://theweeklychallenge.org/blog/perl-weekly-challenge-131/ ... !
>
> -y
>
>
> On Wed, Aug 25, 2021 at 2:08 PM William Michels  wrote:
>>
>> Hi Andy!
>>
>> Maybe this helps (separate coding elements with parens and/or brackets, 
>> still get the same result):
>>
>> > say 1, 1, * + * ...^ *>= 100;
>> (1 1 2 3 5 8 13 21 34 55 89)
>>
>> > say 1, 1, * + * ...^ (*>= 100);
>> (1 1 2 3 5 8 13 21 34 55 89)
>>
>> > say 1, 1, * + * ...^ ( * >= 100);
>> (1 1 2 3 5 8 13 21 34 55 89)
>>
>> > say (1, 1, * + *) ...^ ( * >= 100);
>> (1 1 2 3 5 8 13 21 34 55 89)
>>
>> > say 1, 1, * + * [...^] ( * >= 100);
>> (1 1 2 3 5 8 13 21 34 55 89)
>>
>> > say (1, 1, * + *) [...^] ( * >= 100);
>> (1 1 2 3 5 8 13 21 34 55 89)
>>
>> From Yary:
>> >> Ranges also support arbitrary functions, the doc page shows a Fibonacci 
>> >> number generator
>> >> https://docs.raku.org/language/operators#index-entry-sequence_operator
>>
>> The Fibonacci code above (and in the docs) uses the sequence operator (infix 
>> ...), not the range operator (infix ..). To recap for Andy: Yary, Vadim, 
>> Brian, Fernando and Marc have posted code using the sequence operator; I've 
>> previously posted code using the range operator coupled with a grep() call  
>> [I recall reading somewhere that ranges are cheaper to construct than 
>> sequences, but can't locate the reference at the moment].
>>
>> FWIW_1, I was unable to get the Fibonacci code to work with the range 
>> operator:
>>
>> > say 1, 1, * + * ..^ *>= 100;
>> 11WhateverCode.new
>>
>> FWIW_2, I've had good luck grepping out composite sequences with the 
>> 'range_operator / grep' strategy:
>>
>> > #Using "(^*)" as a synonym for the range "(0..*-1)", see: 
>> > https://docs.raku.org/type/Range
>> Nil
>>
>> > ( 0..11 ).[ (^*).grep: * %% 2 ]
>> (0 2 4 6 8 10)
>>
>> > ( 0..11 ).[ (^*).grep: * %% 3 ]
>> (0 3 6 9)
>>
>> > ( 0..11 ).[ (^*).grep: * %% (2|3) ]
>> (0 2 3 4 6 8 9 10)
>>
>> > ( 0..11 ).[ (^*).grep: * %% any(2,3) ]
>> (0 2 3 4 6 8 9 10)
>>
>> HTH, Bill.
>>
>> PS Now to try to understand the differences (shown earlier in this thread) 
>> when the := binding operator is used!
>>
>>
>> On Wed, Aug 25, 2021 at 7:15 AM Andy Bach  
>> wrote:
>>>
>>> I "misread"
>>> say 1, 1, * + * ...^ *>= 100;
>>>
>>> thinking "shouldn't it be '<=' as you want the total to be less than 100?" 
>>> but
>>> $ raku -e 'say 1, 1, * + * ...^ *<= 100;'
>>> ===SORRY!=== Error while compiling -e
>>> Whitespace required before <= operator
>>> at -e:1
>>> --> say 1, 1, * + * ...^ *<= 100;⏏
>>> expecting any of:
>>> postfix
>>>
>>> and
>>> $ raku -e 'say 1, 1, * + * ...^ * <= 100;'
>>> ()
>>> $ raku -e 'say 1, 1, * + * ...^ * >= 100;'
>>> (1 1 2 3 5 8 13 21 34 55 89)
>>>
>>> So, then it dawned on me that the '>=' is "binding" (right word?) to the 
>>> "*" marking the end of the sequence as "until I am ge 100".  Though that 
>>> doesn't quite work,
>>> $ raku -e 'say 1, 1, * + * ...^ * <= 100;'
>>> ()
>>>
>>> Ah, I see, it does work. The end of the sequence is the first number less 
>>> than 100, so 1 succeeds.  I guess the sequence never gets started.
>>> 
>>> From: yary 
>>> Sent: Tuesday, August 24, 2021 8:39 PM
>>> To: William Michels 
>>> Cc: Marc Chantreux ; raku-users 
>>> Subject: Re: [better solution] pairs of separators from a string
>>>
>>> CAUTION - EXTERNAL:
>>>
>>> Hi Bill,
>>>
>>> When building a range that's an arithmetic or geometric progression, the 
>>> sequence operator is a little quicker to type. And thus also more likely to 
>>> be understood more quickly too.
>>>
>>> > ('a' .. 'h')[(0..*-1).grep: * %% 2 ]
>>> (a c e g)
>>> > ('a' .. 'h')[ 0, 2 ... * ]
>>> (a c e g)
>>>
>>> >

Re: [better solution] pairs of separators from a string

2021-09-20 Thread yary
See Challenge #2 in
https://theweeklychallenge.org/blog/perl-weekly-challenge-131/ ... !

-y


On Wed, Aug 25, 2021 at 2:08 PM William Michels 
wrote:

> Hi Andy!
>
> Maybe this helps (separate coding elements with parens and/or brackets,
> still get the same result):
>
> > say 1, 1, * + * ...^ *>= 100;
> (1 1 2 3 5 8 13 21 34 55 89)
>
> > say 1, 1, * + * ...^ (*>= 100);
> (1 1 2 3 5 8 13 21 34 55 89)
>
> > say 1, 1, * + * ...^ ( * >= 100);
> (1 1 2 3 5 8 13 21 34 55 89)
>
> > say (1, 1, * + *) ...^ ( * >= 100);
> (1 1 2 3 5 8 13 21 34 55 89)
>
> > say 1, 1, * + * [...^] ( * >= 100);
> (1 1 2 3 5 8 13 21 34 55 89)
>
> > say (1, 1, * + *) [...^] ( * >= 100);
> (1 1 2 3 5 8 13 21 34 55 89)
>
> From Yary:
> >> Ranges also support arbitrary functions, the doc page shows a Fibonacci
> number generator
> >> https://docs.raku.org/language/operators#index-entry-sequence_operator
>
> The Fibonacci code above (and in the docs) uses the sequence operator
> (infix ...), not the range operator (infix ..). To recap for Andy: Yary,
> Vadim, Brian, Fernando and Marc have posted code using the sequence
> operator; I've previously posted code using the range operator coupled with
> a grep() call  [I recall reading somewhere that ranges are cheaper to
> construct than sequences, but can't locate the reference at the moment].
>
> FWIW_1, I was unable to get the Fibonacci code to work with the range
> operator:
>
> > say 1, 1, * + * ..^ *>= 100;
> 11WhateverCode.new
>
> FWIW_2, I've had good luck grepping out composite sequences with the
> 'range_operator / grep' strategy:
>
> > #Using "(^*)" as a synonym for the range "(0..*-1)", see:
> https://docs.raku.org/type/Range
> Nil
>
> > ( 0..11 ).[ (^*).grep: * %% 2 ]
> (0 2 4 6 8 10)
>
> > ( 0..11 ).[ (^*).grep: * %% 3 ]
> (0 3 6 9)
>
> > ( 0..11 ).[ (^*).grep: * %% (2|3) ]
> (0 2 3 4 6 8 9 10)
>
> > ( 0..11 ).[ (^*).grep: * %% any(2,3) ]
> (0 2 3 4 6 8 9 10)
>
> HTH, Bill.
>
> PS Now to try to understand the differences (shown earlier in this thread)
> when the := binding operator is used!
>
>
> On Wed, Aug 25, 2021 at 7:15 AM Andy Bach 
> wrote:
>
>> I "misread"
>> say 1, 1, * + * ...^ *>= 100;
>>
>> thinking "shouldn't it be '<=' as you want the total to be less than
>> 100?" but
>> $ raku -e 'say 1, 1, * + * ...^ *<= 100;'
>> ===SORRY!=== Error while compiling -e
>> Whitespace required before <= operator
>> at -e:1
>> --> say 1, 1, * + * ...^ *<= 100;⏏
>> expecting any of:
>> postfix
>>
>> and
>> $ raku -e 'say 1, 1, * + * ...^ * <= 100;'
>> ()
>> $ raku -e 'say 1, 1, * + * ...^ * >= 100;'
>> (1 1 2 3 5 8 13 21 34 55 89)
>>
>> So, then it dawned on me that the '>=' is "binding" (right word?) to the
>> "*" marking the end of the sequence as "until I am ge 100".  Though that
>> doesn't quite work,
>> $ raku -e 'say 1, 1, * + * ...^ * <= 100;'
>> ()
>>
>> Ah, I see, it does work. The end of the sequence is the first number less
>> than 100, so 1 succeeds.  I guess the sequence never gets started.
>> --
>> *From:* yary 
>> *Sent:* Tuesday, August 24, 2021 8:39 PM
>> *To:* William Michels 
>> *Cc:* Marc Chantreux ; raku-users 
>> *Subject:* Re: [better solution] pairs of separators from a string
>>
>>
>> *CAUTION - EXTERNAL: *
>> Hi Bill,
>>
>> When building a range that's an arithmetic or geometric progression, the
>> sequence operator is a little quicker to type. And thus also more likely to
>> be understood more quickly too.
>>
>> > ('a' .. 'h')[(0..*-1).grep: * %% 2 ]
>> (a c e g)
>> > ('a' .. 'h')[ 0, 2 ... * ]
>> (a c e g)
>>
>> > ('a' .. 'h')[(0..*-1).grep: * % 2 ]
>> (b d f h)
>> > ('a' .. 'h')[1, 3...*]
>> (b d f h)
>>
>> # Geometric example- powers of 2
>> > ('a' .. 'z')[1, 2, 4...*]
>> (b c e i q)
>>
>> There isn't a simple translation for the is-prime example that I can
>> think of, that is a good use for "grep"
>>
>> Ranges also support arbitrary functions, the doc page shows a Fibonacci
>> number generator
>> https://docs.raku.org/language/operators#index-entry-sequence_operator
>> "This allows you to write
>>
>> say 1, 1, * + * ...^ *>= 100;
>> # OUTPUT: «(1 1 2 3 5 8 13 21 34 55 89)␤»
>>
>> to generate all Fibonacci numb

Re: [better solution] pairs of separators from a string

2021-08-25 Thread William Michels via perl6-users
Hi Andy!

Maybe this helps (separate coding elements with parens and/or brackets,
still get the same result):

> say 1, 1, * + * ...^ *>= 100;
(1 1 2 3 5 8 13 21 34 55 89)

> say 1, 1, * + * ...^ (*>= 100);
(1 1 2 3 5 8 13 21 34 55 89)

> say 1, 1, * + * ...^ ( * >= 100);
(1 1 2 3 5 8 13 21 34 55 89)

> say (1, 1, * + *) ...^ ( * >= 100);
(1 1 2 3 5 8 13 21 34 55 89)

> say 1, 1, * + * [...^] ( * >= 100);
(1 1 2 3 5 8 13 21 34 55 89)

> say (1, 1, * + *) [...^] ( * >= 100);
(1 1 2 3 5 8 13 21 34 55 89)

>From Yary:
>> Ranges also support arbitrary functions, the doc page shows a Fibonacci
number generator
>> https://docs.raku.org/language/operators#index-entry-sequence_operator

The Fibonacci code above (and in the docs) uses the sequence operator
(infix ...), not the range operator (infix ..). To recap for Andy: Yary,
Vadim, Brian, Fernando and Marc have posted code using the sequence
operator; I've previously posted code using the range operator coupled with
a grep() call  [I recall reading somewhere that ranges are cheaper to
construct than sequences, but can't locate the reference at the moment].

FWIW_1, I was unable to get the Fibonacci code to work with the range
operator:

> say 1, 1, * + * ..^ *>= 100;
11WhateverCode.new

FWIW_2, I've had good luck grepping out composite sequences with the
'range_operator / grep' strategy:

> #Using "(^*)" as a synonym for the range "(0..*-1)", see:
https://docs.raku.org/type/Range
Nil

> ( 0..11 ).[ (^*).grep: * %% 2 ]
(0 2 4 6 8 10)

> ( 0..11 ).[ (^*).grep: * %% 3 ]
(0 3 6 9)

> ( 0..11 ).[ (^*).grep: * %% (2|3) ]
(0 2 3 4 6 8 9 10)

> ( 0..11 ).[ (^*).grep: * %% any(2,3) ]
(0 2 3 4 6 8 9 10)

HTH, Bill.

PS Now to try to understand the differences (shown earlier in this thread)
when the := binding operator is used!


On Wed, Aug 25, 2021 at 7:15 AM Andy Bach 
wrote:

> I "misread"
> say 1, 1, * + * ...^ *>= 100;
>
> thinking "shouldn't it be '<=' as you want the total to be less than 100?"
> but
> $ raku -e 'say 1, 1, * + * ...^ *<= 100;'
> ===SORRY!=== Error while compiling -e
> Whitespace required before <= operator
> at -e:1
> --> say 1, 1, * + * ...^ *<= 100;⏏
> expecting any of:
> postfix
>
> and
> $ raku -e 'say 1, 1, * + * ...^ * <= 100;'
> ()
> $ raku -e 'say 1, 1, * + * ...^ * >= 100;'
> (1 1 2 3 5 8 13 21 34 55 89)
>
> So, then it dawned on me that the '>=' is "binding" (right word?) to the
> "*" marking the end of the sequence as "until I am ge 100".  Though that
> doesn't quite work,
> $ raku -e 'say 1, 1, * + * ...^ * <= 100;'
> ()
>
> Ah, I see, it does work. The end of the sequence is the first number less
> than 100, so 1 succeeds.  I guess the sequence never gets started.
> --
> *From:* yary 
> *Sent:* Tuesday, August 24, 2021 8:39 PM
> *To:* William Michels 
> *Cc:* Marc Chantreux ; raku-users 
> *Subject:* Re: [better solution] pairs of separators from a string
>
>
> *CAUTION - EXTERNAL: *
> Hi Bill,
>
> When building a range that's an arithmetic or geometric progression, the
> sequence operator is a little quicker to type. And thus also more likely to
> be understood more quickly too.
>
> > ('a' .. 'h')[(0..*-1).grep: * %% 2 ]
> (a c e g)
> > ('a' .. 'h')[ 0, 2 ... * ]
> (a c e g)
>
> > ('a' .. 'h')[(0..*-1).grep: * % 2 ]
> (b d f h)
> > ('a' .. 'h')[1, 3...*]
> (b d f h)
>
> # Geometric example- powers of 2
> > ('a' .. 'z')[1, 2, 4...*]
> (b c e i q)
>
> There isn't a simple translation for the is-prime example that I can think
> of, that is a good use for "grep"
>
> Ranges also support arbitrary functions, the doc page shows a Fibonacci
> number generator
> https://docs.raku.org/language/operators#index-entry-sequence_operator
> "This allows you to write
>
> say 1, 1, * + * ...^ *>= 100;
> # OUTPUT: «(1 1 2 3 5 8 13 21 34 55 89)␤»
>
> to generate all Fibonacci numbers up to but excluding 100."
>
>
>
> -y
>
>
> On Tue, Aug 24, 2021 at 6:36 PM William Michels via perl6-users <
> perl6-users@perl.org> wrote:
>
> Hi Marc,
>
> My understanding is that ranges are pretty cheap to construct, and in any
> case, the range @x[0..*-1] is just the index of all elements in @x. The
> .grep() approach may be most useful if you have a function (e.g. %, %%, and
> .is-prime shown below):
>
> > (0...9)
> (0 1 2 3 4 5 6 7 8 9)
> > (0...9)[0..*-1]
> (0 1 2 3 4 5 6 7 8 9)
> > (0...9)[(0..*-1).grep: * ]
> (0 1 2 3 4 5 6 7 8 9)
> > (0...9)[(0..*-1).grep: * %% 2 ]
> (0 2 4 6 8)
> > (0...9)[(0..*-1).grep: * % 2 ]
>

Re: [better solution] pairs of separators from a string

2021-08-25 Thread Andy Bach
I "misread"
say 1, 1, * + * ...^ *>= 100;

thinking "shouldn't it be '<=' as you want the total to be less than 100?" but
$ raku -e 'say 1, 1, * + * ...^ *<= 100;'
===SORRY!=== Error while compiling -e
Whitespace required before <= operator
at -e:1
--> say 1, 1, * + * ...^ *<= 100;⏏
expecting any of:
postfix

and
$ raku -e 'say 1, 1, * + * ...^ * <= 100;'
()
$ raku -e 'say 1, 1, * + * ...^ * >= 100;'
(1 1 2 3 5 8 13 21 34 55 89)

So, then it dawned on me that the '>=' is "binding" (right word?) to the "*" 
marking the end of the sequence as "until I am ge 100".  Though that doesn't 
quite work,
$ raku -e 'say 1, 1, * + * ...^ * <= 100;'
()

Ah, I see, it does work. The end of the sequence is the first number less than 
100, so 1 succeeds.  I guess the sequence never gets started.

From: yary 
Sent: Tuesday, August 24, 2021 8:39 PM
To: William Michels 
Cc: Marc Chantreux ; raku-users 
Subject: Re: [better solution] pairs of separators from a string

CAUTION - EXTERNAL:

Hi Bill,

When building a range that's an arithmetic or geometric progression, the 
sequence operator is a little quicker to type. And thus also more likely to be 
understood more quickly too.

> ('a' .. 'h')[(0..*-1).grep: * %% 2 ]
(a c e g)
> ('a' .. 'h')[ 0, 2 ... * ]
(a c e g)

> ('a' .. 'h')[(0..*-1).grep: * % 2 ]
(b d f h)
> ('a' .. 'h')[1, 3...*]
(b d f h)

# Geometric example- powers of 2
> ('a' .. 'z')[1, 2, 4...*]
(b c e i q)

There isn't a simple translation for the is-prime example that I can think of, 
that is a good use for "grep"

Ranges also support arbitrary functions, the doc page shows a Fibonacci number 
generator
https://docs.raku.org/language/operators#index-entry-sequence_operator
"This allows you to write

say 1, 1, * + * ...^ *>= 100;
# OUTPUT: «(1 1 2 3 5 8 13 21 34 55 89)␤»

to generate all Fibonacci numbers up to but excluding 100."



-y


On Tue, Aug 24, 2021 at 6:36 PM William Michels via perl6-users 
mailto:perl6-users@perl.org>> wrote:
Hi Marc,

My understanding is that ranges are pretty cheap to construct, and in any case, 
the range @x[0..*-1] is just the index of all elements in @x. The .grep() 
approach may be most useful if you have a function (e.g. %, %%, and .is-prime 
shown below):

> (0...9)
(0 1 2 3 4 5 6 7 8 9)
> (0...9)[0..*-1]
(0 1 2 3 4 5 6 7 8 9)
> (0...9)[(0..*-1).grep: * ]
(0 1 2 3 4 5 6 7 8 9)
> (0...9)[(0..*-1).grep: * %% 2 ]
(0 2 4 6 8)
> (0...9)[(0..*-1).grep: * % 2 ]
(1 3 5 7 9)
> (0...9)[(0..*-1).grep: *.is-prime ]
(2 3 5 7)
>

You can find a related example in the docs ( 
https://docs.raku.org/routine/grep#class_HyperSeq). Anyway, I'm sure each 
approach has its fans,

Best, Bill.

On Tue, Aug 24, 2021 at 3:59 AM Marc Chantreux 
mailto:e...@phear.org>> wrote:
hello everyone,

I made a mistake while replying to all of us so anwsers never reached
your boxes. I'll summerize in one answer:

Bill:

> Is it just even/odd elements that you want to separate out? If so, maybe
> .grep() is your friend here

I don't think it is: 0, 2 ... * seems to be

* closer to what i have in mind when i think about the problem
  (so i invoke readability there)
* probably more efficient than (0..*).grep(* % 2) that
  * generate twice the number of required elements
  * need to filter the result

Also, trying to play with this version:

my ($a,$b) =
.[0,2...*],
.[1,3...*]
with .comb;

just don't work because the lists are squashed into scalar context
in the process.

So Brian and Fernando made my day with := and the unexpected power of
the [] operator.

my (@a,@b) := .comb[ [0,2...*], [1,3...*] ];

I really like how declarative it is. Also the use of := now seems
obvious to me.

Sigils still remains something strange to me desprite all your examples
but i'll take some time. thanks everyone.

marc

CAUTION - EXTERNAL EMAIL: This email originated outside the Judiciary. Exercise 
caution when opening attachments or clicking on links.



Re: [better solution] pairs of separators from a string

2021-08-24 Thread yary
Hi Bill,

When building a range that's an arithmetic or geometric progression, the
sequence operator is a little quicker to type. And thus also more likely to
be understood more quickly too.

> ('a' .. 'h')[(0..*-1).grep: * %% 2 ]
(a c e g)
> ('a' .. 'h')[ 0, 2 ... * ]
(a c e g)

> ('a' .. 'h')[(0..*-1).grep: * % 2 ]
(b d f h)
> ('a' .. 'h')[1, 3...*]
(b d f h)

# Geometric example- powers of 2
> ('a' .. 'z')[1, 2, 4...*]
(b c e i q)

There isn't a simple translation for the is-prime example that I can think
of, that is a good use for "grep"

Ranges also support arbitrary functions, the doc page shows a Fibonacci
number generator
https://docs.raku.org/language/operators#index-entry-sequence_operator
"This allows you to write

say 1, 1, * + * ...^ *>= 100;
# OUTPUT: «(1 1 2 3 5 8 13 21 34 55 89)␤»

to generate all Fibonacci numbers up to but excluding 100."



-y


On Tue, Aug 24, 2021 at 6:36 PM William Michels via perl6-users <
perl6-users@perl.org> wrote:

> Hi Marc,
>
> My understanding is that ranges are pretty cheap to construct, and in any
> case, the range @x[0..*-1] is just the index of all elements in @x. The
> .grep() approach may be most useful if you have a function (e.g. %, %%, and
> .is-prime shown below):
>
> > (0...9)
> (0 1 2 3 4 5 6 7 8 9)
> > (0...9)[0..*-1]
> (0 1 2 3 4 5 6 7 8 9)
> > (0...9)[(0..*-1).grep: * ]
> (0 1 2 3 4 5 6 7 8 9)
> > (0...9)[(0..*-1).grep: * %% 2 ]
> (0 2 4 6 8)
> > (0...9)[(0..*-1).grep: * % 2 ]
> (1 3 5 7 9)
> > (0...9)[(0..*-1).grep: *.is-prime ]
> (2 3 5 7)
> >
>
> You can find a related example in the docs (
> https://docs.raku.org/routine/grep#class_HyperSeq). Anyway, I'm sure each
> approach has its fans,
>
> Best, Bill.
>
> On Tue, Aug 24, 2021 at 3:59 AM Marc Chantreux  wrote:
>
>> hello everyone,
>>
>> I made a mistake while replying to all of us so anwsers never reached
>> your boxes. I'll summerize in one answer:
>>
>> Bill:
>>
>> > Is it just even/odd elements that you want to separate out? If so, maybe
>> > .grep() is your friend here
>>
>> I don't think it is: 0, 2 ... * seems to be
>>
>> * closer to what i have in mind when i think about the problem
>>   (so i invoke readability there)
>> * probably more efficient than (0..*).grep(* % 2) that
>>   * generate twice the number of required elements
>>   * need to filter the result
>>
>> Also, trying to play with this version:
>>
>> my ($a,$b) =
>> .[0,2...*],
>> .[1,3...*]
>> with .comb;
>>
>> just don't work because the lists are squashed into scalar context
>> in the process.
>>
>> So Brian and Fernando made my day with := and the unexpected power of
>> the [] operator.
>>
>> my (@a,@b) := .comb[ [0,2...*], [1,3...*] ];
>>
>> I really like how declarative it is. Also the use of := now seems
>> obvious to me.
>>
>> Sigils still remains something strange to me desprite all your examples
>> but i'll take some time. thanks everyone.
>>
>> marc
>>
>>


Re: [better solution] pairs of separators from a string

2021-08-24 Thread William Michels via perl6-users
Hi Marc,

My understanding is that ranges are pretty cheap to construct, and in any
case, the range @x[0..*-1] is just the index of all elements in @x. The
.grep() approach may be most useful if you have a function (e.g. %, %%, and
.is-prime shown below):

> (0...9)
(0 1 2 3 4 5 6 7 8 9)
> (0...9)[0..*-1]
(0 1 2 3 4 5 6 7 8 9)
> (0...9)[(0..*-1).grep: * ]
(0 1 2 3 4 5 6 7 8 9)
> (0...9)[(0..*-1).grep: * %% 2 ]
(0 2 4 6 8)
> (0...9)[(0..*-1).grep: * % 2 ]
(1 3 5 7 9)
> (0...9)[(0..*-1).grep: *.is-prime ]
(2 3 5 7)
>

You can find a related example in the docs (
https://docs.raku.org/routine/grep#class_HyperSeq). Anyway, I'm sure each
approach has its fans,

Best, Bill.

On Tue, Aug 24, 2021 at 3:59 AM Marc Chantreux  wrote:

> hello everyone,
>
> I made a mistake while replying to all of us so anwsers never reached
> your boxes. I'll summerize in one answer:
>
> Bill:
>
> > Is it just even/odd elements that you want to separate out? If so, maybe
> > .grep() is your friend here
>
> I don't think it is: 0, 2 ... * seems to be
>
> * closer to what i have in mind when i think about the problem
>   (so i invoke readability there)
> * probably more efficient than (0..*).grep(* % 2) that
>   * generate twice the number of required elements
>   * need to filter the result
>
> Also, trying to play with this version:
>
> my ($a,$b) =
> .[0,2...*],
> .[1,3...*]
> with .comb;
>
> just don't work because the lists are squashed into scalar context
> in the process.
>
> So Brian and Fernando made my day with := and the unexpected power of
> the [] operator.
>
> my (@a,@b) := .comb[ [0,2...*], [1,3...*] ];
>
> I really like how declarative it is. Also the use of := now seems
> obvious to me.
>
> Sigils still remains something strange to me desprite all your examples
> but i'll take some time. thanks everyone.
>
> marc
>
>