Re: variable as subroutine?

2020-02-12 Thread Aureliano Guedes
Thank for sharing, I'll watch right now

On Wed, Feb 12, 2020 at 4:28 PM William Michels 
wrote:

>
>
> On Wed, Feb 12, 2020 at 8:12 AM Aureliano Guedes <
> guedes.aureli...@gmail.com> wrote:
>
>>
>>
>> On Wed, Feb 12, 2020 at 1:09 PM Andy Bach 
>> wrote:
>>
>>> > So, the problem is you didn't call the same var you had declared.
>>>
>>> my $foo = * **2;
>>>
>>> > Then you call
>>>
>>> foo(2).say
>>>
>>> > Missing the $
>>> D'oh!  Thanks.
>>>
>>> > About the
>>>
>>> my @a = * **2;
>>>
>>> > Your suggestion works
>>>
>>> @a[0](2)
>>>
>>> > or
>>>
>>> @a[0].(2)
>>>
>>> > But I would appreciate an explanation about why `$a[0](0)` didn't work.
>>>
>>> Same reason as mine didn't work "$a" of "$a[0]" is *not* the same
>>> variable as @a - raku doesn't swap sigils, so arrays always use @ even when
>>> they're being dereferenced (?) to a single element - unlike Perl5
>>>
>> Now I see. I din't know that. Thanks. I must study better Raku.
>>
>
> Hi Aureliano, watch about a minute of this Damian Conway video--where he
> shows the new Raku (Perl6) sigil table:
>
> https://youtu.be/Nq2HkAYbG5o?t=568
>
> HTH, Bill.
>
>
>
>> --
>>> *From:* Aureliano Guedes 
>>> *Sent:* Tuesday, February 11, 2020 7:00 PM
>>> *To:* Andy Bach ; perl6-users <
>>> perl6-users@perl.org>
>>> *Subject:* Re: variable as subroutine?
>>>
>>> Sorry, I sent my answer just for you.
>>>
>>> So, the problem is you didn't call the same var you had declared.
>>>
>>> my $foo = * **2;
>>>
>>> Then you call
>>>
>>> foo(2).say
>>>
>>> Missing the $
>>> Try:
>>>
>>> $foo(2).say
>>>
>>> or
>>>
>>> say $foo(2)
>>>
>>>
>>> About the
>>>
>>> my @a = * **2;
>>>
>>> Your suggestion works
>>>
>>> @a[0](2)
>>>
>>> or
>>>
>>> @a[0].(2)
>>>
>>> But I would appreciate an explanation about why `$a[0](0)` didn't work.
>>>
>>>
>>> On Tue, Feb 11, 2020 at 9:45 PM Andy Bach 
>>> wrote:
>>>
>>> > I think it should be like this:
>>>
>>> > my $foo = * **2;
>>> { ... }
>>> > say $foo(4)
>>> 16
>>>
>>> That's what the doc says, but that's not what my install version says.
>>> I do get
>>> > my $foo = * **2;
>>> { ... }
>>>
>>> but say foo get the "unknown sub" error
>>>
>>> > But I have another point::
>>>
>>> > my @a = * **2;
>>> > @a(2)
>>> Invocant of method 'CALL-ME' must be a type object of type 'List', not
>>> an object instance of type 'Array'.  Did you forget a 'multi'?
>>>   in block  at  line 1
>>> Yeah, I'd be surprised if that worked
>>>
>>> > $a[0](2)
>>> ===SORRY!=== Error while compiling:
>>> Variable '$a' is not declared. Did you mean '@a'?
>>> --> ⏏$a[0](2)
>>>
>>> raku doesn't swap sigils anymore, so it should be
>>> @a[0](2)
>>>
>>> maybe, pass the param, to the first bucket in @a which is holding a sub,
>>> so run it  - works here
>>> > my @a = * **2;
>>> [{ ... }]
>>> > say @a[0](4);
>>> 16
>>>
>>> as does ".()"
>>> > say @a[0].(5);
>>> 25
>>> --
>>> *From:* Aureliano Guedes 
>>> *Sent:* Tuesday, February 11, 2020 6:36 PM
>>> *To:* Andy Bach 
>>> *Subject:* Re: variable as subroutine?
>>>
>>> I think it should be like this:
>>>
>>> > my $foo = * **2;
>>> { ... }
>>> > say $foo(4)
>>> 16
>>>
>>> But I have another point::
>>>
>>> > my @a = * **2;
>>> [{ ... }]
>>> > @a(2)
>>> Invocant of method 'CALL-ME' must be a type object of type 'List', not
>>> an object instance of type 'Array'.  Did you forget a 'multi'?
>>>   in block  at  line 1
>>>
>>> > $a[0](2)
>>> ===SORRY!=== Error while compiling:
>>> Variable '$a' is not declared. Did you mean '@a'?
>>&g

Re: variable as subroutine?

2020-02-12 Thread Andy Bach
> watch about a minute of this Damian Conway video--where he shows the new Raku 
> (Perl6) sigil table:

https://youtu.be/Nq2HkAYbG5o?t=568

Watch the whole thing - D.C. is one of the most entertaining instructors I've 
ever had the pleasure to list to[1],  plus he's smarter than a sitting on a 
bushel of thumbtacks!  Okay, and the accent.

a

[1]
I really wish there were somewhere a copy of his presentation at the Chicago 
YAPC long ago where he presented a clip on why to go to YAPC in Australia the 
next year - "of the 10 most deadly snakes in the world, 11 of them are native 
to Australia".  Before that YAPC, he had a meet at a bar in Chicago with the PM 
group there where he "explained" his obfu Conway (no relation) "game of 
life"/quine script
https://everything2.com/title/SelfGOL

From: William Michels 
Sent: Wednesday, February 12, 2020 1:27 PM
To: Aureliano Guedes 
Cc: Andy Bach ; perl6-users 
Subject: Re: variable as subroutine?



On Wed, Feb 12, 2020 at 8:12 AM Aureliano Guedes 
mailto:guedes.aureli...@gmail.com>> wrote:


On Wed, Feb 12, 2020 at 1:09 PM Andy Bach 
mailto:andy_b...@wiwb.uscourts.gov>> wrote:
> So, the problem is you didn't call the same var you had declared.

my $foo = * **2;
> Then you call
foo(2).say
> Missing the $
D'oh!  Thanks.

> About the
my @a = * **2;
> Your suggestion works
@a[0](2)
> or
@a[0].(2)
> But I would appreciate an explanation about why `$a[0](0)` didn't work.

Same reason as mine didn't work "$a" of "$a[0]" is *not* the same variable as 
@a - raku doesn't swap sigils, so arrays always use @ even when they're being 
dereferenced (?) to a single element - unlike Perl5
Now I see. I din't know that. Thanks. I must study better Raku.

Hi Aureliano, watch about a minute of this Damian Conway video--where he shows 
the new Raku (Perl6) sigil table:

https://youtu.be/Nq2HkAYbG5o?t=568

HTH, Bill.



From: Aureliano Guedes 
mailto:guedes.aureli...@gmail.com>>
Sent: Tuesday, February 11, 2020 7:00 PM
To: Andy Bach 
mailto:andy_b...@wiwb.uscourts.gov>>; perl6-users 
mailto:perl6-users@perl.org>>
Subject: Re: variable as subroutine?

Sorry, I sent my answer just for you.

So, the problem is you didn't call the same var you had declared.

my $foo = * **2;
Then you call
foo(2).say
Missing the $
Try:
$foo(2).say
or
say $foo(2)

About the
my @a = * **2;
Your suggestion works
@a[0](2)
or
@a[0].(2)
But I would appreciate an explanation about why `$a[0](0)` didn't work.


On Tue, Feb 11, 2020 at 9:45 PM Andy Bach 
mailto:andy_b...@wiwb.uscourts.gov>> wrote:
> I think it should be like this:

> my $foo = * **2;
{ ... }
> say $foo(4)
16

That's what the doc says, but that's not what my install version says.  I do get
> my $foo = * **2;
{ ... }

but say foo get the "unknown sub" error

> But I have another point::

> my @a = * **2;
> @a(2)
Invocant of method 'CALL-ME' must be a type object of type 'List', not an 
object instance of type 'Array'.  Did you forget a 'multi'?
  in block  at  line 1
Yeah, I'd be surprised if that worked

> $a[0](2)
===SORRY!=== Error while compiling:
Variable '$a' is not declared. Did you mean '@a'?
--> ⏏$a[0](2)

raku doesn't swap sigils anymore, so it should be
@a[0](2)

maybe, pass the param, to the first bucket in @a which is holding a sub, so run 
it  - works here
> my @a = * **2;
[{ ... }]
> say @a[0](4);
16

as does ".()"
> say @a[0].(5);
25
____
From: Aureliano Guedes 
mailto:guedes.aureli...@gmail.com>>
Sent: Tuesday, February 11, 2020 6:36 PM
To: Andy Bach mailto:andy_b...@wiwb.uscourts.gov>>
Subject: Re: variable as subroutine?

I think it should be like this:

> my $foo = * **2;
{ ... }
> say $foo(4)
16

But I have another point::

> my @a = * **2;
[{ ... }]
> @a(2)
Invocant of method 'CALL-ME' must be a type object of type 'List', not an 
object instance of type 'Array'.  Did you forget a 'multi'?
  in block  at  line 1

> $a[0](2)
===SORRY!=== Error while compiling:
Variable '$a' is not declared. Did you mean '@a'?
--> ⏏$a[0](2)



On Tue, Feb 11, 2020 at 8:43 PM Andy Bach 
mailto:andy_b...@wiwb.uscourts.gov>> wrote:
>The * * * call generates a WhateverCode block. This is expecting 2 arguments.

-> $x { $x * $x } is taking one argument.

> The best documentation would probably be : https://docs.raku.org/type/Whatever

so, from:
Multiple * in one expression generate closures with as many arguments:

my $c = * + *;  # same as   -> $x, $y { $x + $y }
Using * in complex expressions will also generate closures:

my $c = 4 * * + 5;  # same as   -> $x { 4 * $x + 5 }

The * *  * the parser says "one whatever, one math op (*) and one more whatever"
my $foo =  $x, $y { $x + $y };

so,
my $foo = *  **2;
shou

Re: variable as subroutine?

2020-02-12 Thread William Michels via perl6-users
On Wed, Feb 12, 2020 at 8:12 AM Aureliano Guedes 
wrote:

>
>
> On Wed, Feb 12, 2020 at 1:09 PM Andy Bach 
> wrote:
>
>> > So, the problem is you didn't call the same var you had declared.
>>
>> my $foo = * **2;
>>
>> > Then you call
>>
>> foo(2).say
>>
>> > Missing the $
>> D'oh!  Thanks.
>>
>> > About the
>>
>> my @a = * **2;
>>
>> > Your suggestion works
>>
>> @a[0](2)
>>
>> > or
>>
>> @a[0].(2)
>>
>> > But I would appreciate an explanation about why `$a[0](0)` didn't work.
>>
>> Same reason as mine didn't work "$a" of "$a[0]" is *not* the same
>> variable as @a - raku doesn't swap sigils, so arrays always use @ even when
>> they're being dereferenced (?) to a single element - unlike Perl5
>>
> Now I see. I din't know that. Thanks. I must study better Raku.
>

Hi Aureliano, watch about a minute of this Damian Conway video--where he
shows the new Raku (Perl6) sigil table:

https://youtu.be/Nq2HkAYbG5o?t=568

HTH, Bill.



> --
>> *From:* Aureliano Guedes 
>> *Sent:* Tuesday, February 11, 2020 7:00 PM
>> *To:* Andy Bach ; perl6-users <
>> perl6-users@perl.org>
>> *Subject:* Re: variable as subroutine?
>>
>> Sorry, I sent my answer just for you.
>>
>> So, the problem is you didn't call the same var you had declared.
>>
>> my $foo = * **2;
>>
>> Then you call
>>
>> foo(2).say
>>
>> Missing the $
>> Try:
>>
>> $foo(2).say
>>
>> or
>>
>> say $foo(2)
>>
>>
>> About the
>>
>> my @a = * **2;
>>
>> Your suggestion works
>>
>> @a[0](2)
>>
>> or
>>
>> @a[0].(2)
>>
>> But I would appreciate an explanation about why `$a[0](0)` didn't work.
>>
>>
>> On Tue, Feb 11, 2020 at 9:45 PM Andy Bach 
>> wrote:
>>
>> > I think it should be like this:
>>
>> > my $foo = * **2;
>> { ... }
>> > say $foo(4)
>> 16
>>
>> That's what the doc says, but that's not what my install version says.  I
>> do get
>> > my $foo = * **2;
>> { ... }
>>
>> but say foo get the "unknown sub" error
>>
>> > But I have another point::
>>
>> > my @a = * **2;
>> > @a(2)
>> Invocant of method 'CALL-ME' must be a type object of type 'List', not an
>> object instance of type 'Array'.  Did you forget a 'multi'?
>>   in block  at  line 1
>> Yeah, I'd be surprised if that worked
>>
>> > $a[0](2)
>> ===SORRY!=== Error while compiling:
>> Variable '$a' is not declared. Did you mean '@a'?
>> --> ⏏$a[0](2)
>>
>> raku doesn't swap sigils anymore, so it should be
>> @a[0](2)
>>
>> maybe, pass the param, to the first bucket in @a which is holding a sub,
>> so run it  - works here
>> > my @a = * **2;
>> [{ ... }]
>> > say @a[0](4);
>> 16
>>
>> as does ".()"
>> > say @a[0].(5);
>> 25
>> --
>> *From:* Aureliano Guedes 
>> *Sent:* Tuesday, February 11, 2020 6:36 PM
>> *To:* Andy Bach 
>> *Subject:* Re: variable as subroutine?
>>
>> I think it should be like this:
>>
>> > my $foo = * **2;
>> { ... }
>> > say $foo(4)
>> 16
>>
>> But I have another point::
>>
>> > my @a = * **2;
>> [{ ... }]
>> > @a(2)
>> Invocant of method 'CALL-ME' must be a type object of type 'List', not an
>> object instance of type 'Array'.  Did you forget a 'multi'?
>>   in block  at  line 1
>>
>> > $a[0](2)
>> ===SORRY!=== Error while compiling:
>> Variable '$a' is not declared. Did you mean '@a'?
>> --> ⏏$a[0](2)
>>
>>
>>
>> On Tue, Feb 11, 2020 at 8:43 PM Andy Bach 
>> wrote:
>>
>> >The * * * call generates a WhateverCode block. This is expecting 2
>> arguments.
>>
>> -> $x { $x * $x } is taking one argument.
>>
>> > The best documentation would probably be :
>> https://docs.raku.org/type/Whatever
>>
>> so, from:
>> Multiple * in one expression generate closures with as many arguments:
>>
>> my $c = * + *;  # same as   -> $x, $y { $x + $y }
>> Using * in complex expressions will also generate closures:
>>
>> my $c = 4 * * + 5;  # same as   -> $x { 4 * $x + 5 }
>>
>> The * *  * the parser says "one 

Re: variable as subroutine?

2020-02-12 Thread Aureliano Guedes
On Wed, Feb 12, 2020 at 1:09 PM Andy Bach 
wrote:

> > So, the problem is you didn't call the same var you had declared.
>
> my $foo = * **2;
>
> > Then you call
>
> foo(2).say
>
> > Missing the $
> D'oh!  Thanks.
>
> > About the
>
> my @a = * **2;
>
> > Your suggestion works
>
> @a[0](2)
>
> > or
>
> @a[0].(2)
>
> > But I would appreciate an explanation about why `$a[0](0)` didn't work.
>
> Same reason as mine didn't work "$a" of "$a[0]" is *not* the same variable
> as @a - raku doesn't swap sigils, so arrays always use @ even when they're
> being dereferenced (?) to a single element - unlike Perl5
>
Now I see. I din't know that. Thanks. I must study better Raku.

> --
> *From:* Aureliano Guedes 
> *Sent:* Tuesday, February 11, 2020 7:00 PM
> *To:* Andy Bach ; perl6-users <
> perl6-users@perl.org>
> *Subject:* Re: variable as subroutine?
>
> Sorry, I sent my answer just for you.
>
> So, the problem is you didn't call the same var you had declared.
>
> my $foo = * **2;
>
> Then you call
>
> foo(2).say
>
> Missing the $
> Try:
>
> $foo(2).say
>
> or
>
> say $foo(2)
>
>
> About the
>
> my @a = * **2;
>
> Your suggestion works
>
> @a[0](2)
>
> or
>
> @a[0].(2)
>
> But I would appreciate an explanation about why `$a[0](0)` didn't work.
>
>
> On Tue, Feb 11, 2020 at 9:45 PM Andy Bach 
> wrote:
>
> > I think it should be like this:
>
> > my $foo = * **2;
> { ... }
> > say $foo(4)
> 16
>
> That's what the doc says, but that's not what my install version says.  I
> do get
> > my $foo = * **2;
> { ... }
>
> but say foo get the "unknown sub" error
>
> > But I have another point::
>
> > my @a = * **2;
> > @a(2)
> Invocant of method 'CALL-ME' must be a type object of type 'List', not an
> object instance of type 'Array'.  Did you forget a 'multi'?
>   in block  at  line 1
> Yeah, I'd be surprised if that worked
>
> > $a[0](2)
> ===SORRY!=== Error while compiling:
> Variable '$a' is not declared. Did you mean '@a'?
> --> ⏏$a[0](2)
>
> raku doesn't swap sigils anymore, so it should be
> @a[0](2)
>
> maybe, pass the param, to the first bucket in @a which is holding a sub,
> so run it  - works here
> > my @a = * **2;
> [{ ... }]
> > say @a[0](4);
> 16
>
> as does ".()"
> > say @a[0].(5);
> 25
> --
> *From:* Aureliano Guedes 
> *Sent:* Tuesday, February 11, 2020 6:36 PM
> *To:* Andy Bach 
> *Subject:* Re: variable as subroutine?
>
> I think it should be like this:
>
> > my $foo = * **2;
> { ... }
> > say $foo(4)
> 16
>
> But I have another point::
>
> > my @a = * **2;
> [{ ... }]
> > @a(2)
> Invocant of method 'CALL-ME' must be a type object of type 'List', not an
> object instance of type 'Array'.  Did you forget a 'multi'?
>   in block  at  line 1
>
> > $a[0](2)
> ===SORRY!=== Error while compiling:
> Variable '$a' is not declared. Did you mean '@a'?
> --> ⏏$a[0](2)
>
>
>
> On Tue, Feb 11, 2020 at 8:43 PM Andy Bach 
> wrote:
>
> >The * * * call generates a WhateverCode block. This is expecting 2
> arguments.
>
> -> $x { $x * $x } is taking one argument.
>
> > The best documentation would probably be :
> https://docs.raku.org/type/Whatever
>
> so, from:
> Multiple * in one expression generate closures with as many arguments:
>
> my $c = * + *;  # same as   -> $x, $y { $x + $y }
> Using * in complex expressions will also generate closures:
>
> my $c = 4 * * + 5;  # same as   -> $x { 4 * $x + 5 }
>
> The * *  * the parser says "one whatever, one math op (*) and one more
> whatever"
> my $foo =  $x, $y { $x + $y };
>
> so,
> my $foo = *  **2;
> should do $x * $x? Though I see
>
> > my $foo = * **2;
> { ... }
> say foo(4);
> ===SORRY!=== Error while compiling:
> Undeclared routine:
> foo used at line 1
>
> but '&' works
> > my  = * **2;
> { ... }
> > foo(4);
> 16
> > my  = * **2;
> { ... }
> > say c(4);
> 16
>
>
>
>
>
> --
> *From:* Simon Proctor 
> *Sent:* Tuesday, February 11, 2020 9:27 AM
> *To:* Andy Bach 
> *Cc:* perl6-users 
> *Subject:* Re: variable as subroutine?
>
> The * * * call generates a WhateverCode block. This is expecting 2
> arguments.
>
> -> $x { $x * $x } is taking one argument.
>
> The best documentation would probably be :

Re: variable as subroutine?

2020-02-12 Thread Andy Bach
> So, the problem is you didn't call the same var you had declared.

my $foo = * **2;
> Then you call
foo(2).say
> Missing the $
D'oh!  Thanks.

> About the
my @a = * **2;
> Your suggestion works
@a[0](2)
> or
@a[0].(2)
> But I would appreciate an explanation about why `$a[0](0)` didn't work.

Same reason as mine didn't work "$a" of "$a[0]" is *not* the same variable as 
@a - raku doesn't swap sigils, so arrays always use @ even when they're being 
dereferenced (?) to a single element - unlike Perl5

From: Aureliano Guedes 
Sent: Tuesday, February 11, 2020 7:00 PM
To: Andy Bach ; perl6-users 
Subject: Re: variable as subroutine?

Sorry, I sent my answer just for you.

So, the problem is you didn't call the same var you had declared.

my $foo = * **2;
Then you call
foo(2).say
Missing the $
Try:
$foo(2).say
or
say $foo(2)

About the
my @a = * **2;
Your suggestion works
@a[0](2)
or
@a[0].(2)
But I would appreciate an explanation about why `$a[0](0)` didn't work.


On Tue, Feb 11, 2020 at 9:45 PM Andy Bach 
mailto:andy_b...@wiwb.uscourts.gov>> wrote:
> I think it should be like this:

> my $foo = * **2;
{ ... }
> say $foo(4)
16

That's what the doc says, but that's not what my install version says.  I do get
> my $foo = * **2;
{ ... }

but say foo get the "unknown sub" error

> But I have another point::

> my @a = * **2;
> @a(2)
Invocant of method 'CALL-ME' must be a type object of type 'List', not an 
object instance of type 'Array'.  Did you forget a 'multi'?
  in block  at  line 1
Yeah, I'd be surprised if that worked

> $a[0](2)
===SORRY!=== Error while compiling:
Variable '$a' is not declared. Did you mean '@a'?
--> ⏏$a[0](2)

raku doesn't swap sigils anymore, so it should be
@a[0](2)

maybe, pass the param, to the first bucket in @a which is holding a sub, so run 
it  - works here
> my @a = * **2;
[{ ... }]
> say @a[0](4);
16

as does ".()"
> say @a[0].(5);
25

From: Aureliano Guedes 
mailto:guedes.aureli...@gmail.com>>
Sent: Tuesday, February 11, 2020 6:36 PM
To: Andy Bach mailto:andy_b...@wiwb.uscourts.gov>>
Subject: Re: variable as subroutine?

I think it should be like this:

> my $foo = * **2;
{ ... }
> say $foo(4)
16

But I have another point::

> my @a = * **2;
[{ ... }]
> @a(2)
Invocant of method 'CALL-ME' must be a type object of type 'List', not an 
object instance of type 'Array'.  Did you forget a 'multi'?
  in block  at  line 1

> $a[0](2)
===SORRY!=== Error while compiling:
Variable '$a' is not declared. Did you mean '@a'?
--> ⏏$a[0](2)



On Tue, Feb 11, 2020 at 8:43 PM Andy Bach 
mailto:andy_b...@wiwb.uscourts.gov>> wrote:
>The * * * call generates a WhateverCode block. This is expecting 2 arguments.

-> $x { $x * $x } is taking one argument.

> The best documentation would probably be : https://docs.raku.org/type/Whatever

so, from:
Multiple * in one expression generate closures with as many arguments:

my $c = * + *;  # same as   -> $x, $y { $x + $y }
Using * in complex expressions will also generate closures:

my $c = 4 * * + 5;  # same as   -> $x { 4 * $x + 5 }

The * *  * the parser says "one whatever, one math op (*) and one more whatever"
my $foo =  $x, $y { $x + $y };

so,
my $foo = *  **2;
should do $x * $x? Though I see

> my $foo = * **2;
{ ... }
say foo(4);
===SORRY!=== Error while compiling:
Undeclared routine:
foo used at line 1

but '&' works
> my  = * **2;
{ ... }
> foo(4);
16
> my  = * **2;
{ ... }
> say c(4);
16






From: Simon Proctor mailto:simon.proc...@gmail.com>>
Sent: Tuesday, February 11, 2020 9:27 AM
To: Andy Bach mailto:andy_b...@wiwb.uscourts.gov>>
Cc: perl6-users mailto:perl6-users@perl.org>>
Subject: Re: variable as subroutine?

The * * * call generates a WhateverCode block. This is expecting 2 arguments.

-> $x { $x * $x } is taking one argument.

The best documentation would probably be : https://docs.raku.org/type/Whatever

Hope that helps.

(For giggles earlier I made this dumb example of functional programming)


my  = {$_};
my  = {$_ * $_};
sub trinar( , , , *@values ) { @values.map( -> $v { ($v) 
?? ($v) !! ($v) } ) };
trinar( *.is-prime, ,, ^30 ).say

Enjoy. ;)

On Tue, 11 Feb 2020 at 15:22, Andy Bach 
mailto:andy_b...@wiwb.uscourts.gov>> wrote:
I have a few less related questions
>> those are 3 ways to write the same sub:

sub foo ($x) { $x * $x }
my  = -> $x { $x * $x }
my  = * * *;

> A Note on Marc's comment:
my  = * * *
is not the same as:
my  = -> $x { $x * $x }
it is the same  as:
my  = -> $x, $y { $x * $y }

Okay, "* * *" - how does that work?  How is it different than
-> $x { $x * $x }
?  It needs two params?

I followed the callable link but that left me with more ques

Re: variable as subroutine?

2020-02-11 Thread Aureliano Guedes
Sorry, I sent my answer just for you.

So, the problem is you didn't call the same var you had declared.

my $foo = * **2;

Then you call

foo(2).say

Missing the $
Try:

$foo(2).say

or

say $foo(2)


About the

my @a = * **2;

Your suggestion works

@a[0](2)

or

@a[0].(2)

But I would appreciate an explanation about why `$a[0](0)` didn't work.


On Tue, Feb 11, 2020 at 9:45 PM Andy Bach 
wrote:

> > I think it should be like this:
>
> > my $foo = * **2;
> { ... }
> > say $foo(4)
> 16
>
> That's what the doc says, but that's not what my install version says.  I
> do get
> > my $foo = * **2;
> { ... }
>
> but say foo get the "unknown sub" error
>
> > But I have another point::
>
> > my @a = * **2;
> > @a(2)
> Invocant of method 'CALL-ME' must be a type object of type 'List', not an
> object instance of type 'Array'.  Did you forget a 'multi'?
>   in block  at  line 1
> Yeah, I'd be surprised if that worked
>
> > $a[0](2)
> ===SORRY!=== Error while compiling:
> Variable '$a' is not declared. Did you mean '@a'?
> --> ⏏$a[0](2)
>
> raku doesn't swap sigils anymore, so it should be
> @a[0](2)
>
> maybe, pass the param, to the first bucket in @a which is holding a sub,
> so run it  - works here
> > my @a = * **2;
> [{ ... }]
> > say @a[0](4);
> 16
>
> as does ".()"
> > say @a[0].(5);
> 25
> --
> *From:* Aureliano Guedes 
> *Sent:* Tuesday, February 11, 2020 6:36 PM
> *To:* Andy Bach 
> *Subject:* Re: variable as subroutine?
>
> I think it should be like this:
>
> > my $foo = * **2;
> { ... }
> > say $foo(4)
> 16
>
> But I have another point::
>
> > my @a = * **2;
> [{ ... }]
> > @a(2)
> Invocant of method 'CALL-ME' must be a type object of type 'List', not an
> object instance of type 'Array'.  Did you forget a 'multi'?
>   in block  at  line 1
>
> > $a[0](2)
> ===SORRY!=== Error while compiling:
> Variable '$a' is not declared. Did you mean '@a'?
> --> ⏏$a[0](2)
>
>
>
> On Tue, Feb 11, 2020 at 8:43 PM Andy Bach 
> wrote:
>
> >The * * * call generates a WhateverCode block. This is expecting 2
> arguments.
>
> -> $x { $x * $x } is taking one argument.
>
> > The best documentation would probably be :
> https://docs.raku.org/type/Whatever
>
> so, from:
> Multiple * in one expression generate closures with as many arguments:
>
> my $c = * + *;  # same as   -> $x, $y { $x + $y }
> Using * in complex expressions will also generate closures:
>
> my $c = 4 * * + 5;  # same as   -> $x { 4 * $x + 5 }
>
> The * *  * the parser says "one whatever, one math op (*) and one more
> whatever"
> my $foo =  $x, $y { $x + $y };
>
> so,
> my $foo = *  **2;
> should do $x * $x? Though I see
>
> > my $foo = * **2;
> { ... }
> say foo(4);
> ===SORRY!=== Error while compiling:
> Undeclared routine:
> foo used at line 1
>
> but '&' works
> > my  = * **2;
> { ... }
> > foo(4);
> 16
> > my  = * **2;
> { ... }
> > say c(4);
> 16
>
>
>
>
>
> --
> *From:* Simon Proctor 
> *Sent:* Tuesday, February 11, 2020 9:27 AM
> *To:* Andy Bach 
> *Cc:* perl6-users 
> *Subject:* Re: variable as subroutine?
>
> The * * * call generates a WhateverCode block. This is expecting 2
> arguments.
>
> -> $x { $x * $x } is taking one argument.
>
> The best documentation would probably be :
> https://docs.raku.org/type/Whatever
>
> Hope that helps.
>
> (For giggles earlier I made this dumb example of functional programming)
>
>
> my  = {$_};
> my  = {$_ * $_};
> sub trinar( , , , *@values ) { @values.map( -> $v {
> ($v) ?? ($v) !! ($v) } ) };
> trinar( *.is-prime, ,, ^30 ).say
>
> Enjoy. ;)
>
> On Tue, 11 Feb 2020 at 15:22, Andy Bach 
> wrote:
>
> I have a few less related questions
> >> those are 3 ways to write the same sub:
>
> sub foo ($x) { $x * $x }
> my  = -> $x { $x * $x }
> my  = * * *;
>
> > A Note on Marc's comment:
> my  = * * *
> is not the same as:
> my  = -> $x { $x * $x }
> it is the same  as:
> my  = -> $x, $y { $x * $y }
>
> Okay, "* * *" - how does that work?  How is it different than
> -> $x { $x * $x }
> ?  It needs two params?
>
> I followed the callable link but that left me with more questions:
>
> method CALL-ME
> method CALL-ME(Callable:D $self: |arguments)
> This method is required for postfix:«( )» and postfix:«.( )». It's what
> makes an object actually call-able and needs to be

Re: variable as subroutine?

2020-02-11 Thread Andy Bach
>The * * * call generates a WhateverCode block. This is expecting 2 arguments.

-> $x { $x * $x } is taking one argument.

> The best documentation would probably be : https://docs.raku.org/type/Whatever

so, from:
Multiple * in one expression generate closures with as many arguments:

my $c = * + *;  # same as   -> $x, $y { $x + $y }
Using * in complex expressions will also generate closures:

my $c = 4 * * + 5;  # same as   -> $x { 4 * $x + 5 }

The * *  * the parser says "one whatever, one math op (*) and one more whatever"
my $foo =  $x, $y { $x + $y };

so,
my $foo = *  **2;
should do $x * $x? Though I see

> my $foo = * **2;
{ ... }
say foo(4);
===SORRY!=== Error while compiling:
Undeclared routine:
foo used at line 1

but '&' works
> my  = * **2;
{ ... }
> foo(4);
16
> my  = * **2;
{ ... }
> say c(4);
16






From: Simon Proctor 
Sent: Tuesday, February 11, 2020 9:27 AM
To: Andy Bach 
Cc: perl6-users 
Subject: Re: variable as subroutine?

The * * * call generates a WhateverCode block. This is expecting 2 arguments.

-> $x { $x * $x } is taking one argument.

The best documentation would probably be : https://docs.raku.org/type/Whatever

Hope that helps.

(For giggles earlier I made this dumb example of functional programming)


my  = {$_};
my  = {$_ * $_};
sub trinar( , , , *@values ) { @values.map( -> $v { ($v) 
?? ($v) !! ($v) } ) };
trinar( *.is-prime, ,, ^30 ).say

Enjoy. ;)

On Tue, 11 Feb 2020 at 15:22, Andy Bach 
mailto:andy_b...@wiwb.uscourts.gov>> wrote:
I have a few less related questions
>> those are 3 ways to write the same sub:

sub foo ($x) { $x * $x }
my  = -> $x { $x * $x }
my  = * * *;

> A Note on Marc's comment:
my  = * * *
is not the same as:
my  = -> $x { $x * $x }
it is the same  as:
my  = -> $x, $y { $x * $y }

Okay, "* * *" - how does that work?  How is it different than
-> $x { $x * $x }
?  It needs two params?

I followed the callable link but that left me with more questions:

method CALL-ME
method CALL-ME(Callable:D $self: |arguments)
This method is required for postfix:«( )» and postfix:«.( )». It's what makes 
an object actually call-able and needs to be overloaded to let a given object 
act like a routine. If the object needs to be stored in a &-sigiled container, 
is has to implement Callable.

class A does Callable {
submethod CALL-ME(|c){ 'called' }
}
my  = A;
say a(); # OUTPUT: «called␤»

That second "postfix" operator, means
say a.();  # also outputs "called"

but what is the "pipe c" signature doing for the submethod?

From: Simon Proctor mailto:simon.proc...@gmail.com>>
Sent: Tuesday, February 11, 2020 3:17 AM
To: ToddAndMargo mailto:toddandma...@zoho.com>>
Cc: perl6-users mailto:perl6-users@perl.org>>
Subject: Re: variable as subroutine?

If you can store a subroutine in a variable then you can pass said subroutine 
to another one as an argument.

This leads us into the joys of functional programming.

And you may have used it already and not even realised.

The .map and .grep methods (and .reduce and bunch of others) all expect a 
callable code block (that might be a subroutine) as a function.

This :

my @a = (1..10).map( * ** 2 )

and this :

my  = sub ($v) { $v ** 2 };
my @a = (1..10).map(  );

are doing the same thing. Except the second one has the  function available 
for other things.

(A Note on Marc's comment * * * is not the same as -> $x { $x * $x } it is the 
same  as -> $x, $y { $x * $y } )

You can then start doing things like storing functions as values in hashes and 
doing all *kinds* of fun stuff.

Welcome to the tip of the iceberg.

Simon


On Tue, 11 Feb 2020 at 03:21, ToddAndMargo via perl6-users 
mailto:perl6-users@perl.org>> wrote:
Hi All,

Is Larry using his magic powder again?

Can I declare a subroutine as a variable?

 my $abc = my sub (UInt $u, Str $s, Int $I) {

How would I use it?

And why would do such a thing?

-T


--
Simon Proctor
Cognoscite aliquid novum cotidie

http://www.khanate.co.uk/


--
Simon Proctor
Cognoscite aliquid novum cotidie

http://www.khanate.co.uk/


Re: variable as subroutine?

2020-02-11 Thread Simon Proctor
The * * * call generates a WhateverCode block. This is expecting 2
arguments.

-> $x { $x * $x } is taking one argument.

The best documentation would probably be :
https://docs.raku.org/type/Whatever

Hope that helps.

(For giggles earlier I made this dumb example of functional programming)


my  = {$_};
my  = {$_ * $_};
sub trinar( , , , *@values ) { @values.map( -> $v {
($v) ?? ($v) !! ($v) } ) };
trinar( *.is-prime, ,, ^30 ).say

Enjoy. ;)

On Tue, 11 Feb 2020 at 15:22, Andy Bach  wrote:

> I have a few less related questions
> >> those are 3 ways to write the same sub:
>
> sub foo ($x) { $x * $x }
> my  = -> $x { $x * $x }
> my  = * * *;
>
> > A Note on Marc's comment:
> my  = * * *
> is not the same as:
> my  = -> $x { $x * $x }
> it is the same  as:
> my  = -> $x, $y { $x * $y }
>
> Okay, "* * *" - how does that work?  How is it different than
> -> $x { $x * $x }
> ?  It needs two params?
>
> I followed the callable link but that left me with more questions:
>
> method CALL-ME
> method CALL-ME(Callable:D $self: |arguments)
> This method is required for postfix:«( )» and postfix:«.( )». It's what
> makes an object actually call-able and needs to be overloaded to let a
> given object act like a routine. If the object needs to be stored in a
> &-sigiled container, is has to implement Callable.
>
> class A does Callable {
> submethod CALL-ME(|c){ 'called' }
> }
> my  = A;
> say a(); # OUTPUT: «called␤»
>
> That second "postfix" operator, means
> say a.();  # also outputs "called"
>
> but what is the "pipe c" signature doing for the submethod?
> ------
> *From:* Simon Proctor 
> *Sent:* Tuesday, February 11, 2020 3:17 AM
> *To:* ToddAndMargo 
> *Cc:* perl6-users 
> *Subject:* Re: variable as subroutine?
>
> If you can store a subroutine in a variable then you can pass said
> subroutine to another one as an argument.
>
> This leads us into the joys of functional programming.
>
> And you may have used it already and not even realised.
>
> The .map and .grep methods (and .reduce and bunch of others) all expect a
> callable code block (that might be a subroutine) as a function.
>
> This :
>
> my @a = (1..10).map( * ** 2 )
>
> and this :
>
> my  = sub ($v) { $v ** 2 };
> my @a = (1..10).map(  );
>
> are doing the same thing. Except the second one has the  function
> available for other things.
>
> (A Note on Marc's comment * * * is not the same as -> $x { $x * $x } it is
> the same  as -> $x, $y { $x * $y } )
>
> You can then start doing things like storing functions as values in hashes
> and doing all *kinds* of fun stuff.
>
> Welcome to the tip of the iceberg.
>
> Simon
>
>
> On Tue, 11 Feb 2020 at 03:21, ToddAndMargo via perl6-users <
> perl6-users@perl.org> wrote:
>
> Hi All,
>
> Is Larry using his magic powder again?
>
> Can I declare a subroutine as a variable?
>
>  my $abc = my sub (UInt $u, Str $s, Int $I) {
>
> How would I use it?
>
> And why would do such a thing?
>
> -T
>
>
>
> --
> Simon Proctor
> Cognoscite aliquid novum cotidie
>
> http://www.khanate.co.uk/
>


-- 
Simon Proctor
Cognoscite aliquid novum cotidie

http://www.khanate.co.uk/


Re: variable as subroutine?

2020-02-11 Thread Andy Bach
I have a few less related questions
>> those are 3 ways to write the same sub:

sub foo ($x) { $x * $x }
my  = -> $x { $x * $x }
my  = * * *;

> A Note on Marc's comment:
my  = * * *
is not the same as:
my  = -> $x { $x * $x }
it is the same  as:
my  = -> $x, $y { $x * $y }

Okay, "* * *" - how does that work?  How is it different than
-> $x { $x * $x }
?  It needs two params?

I followed the callable link but that left me with more questions:

method CALL-ME
method CALL-ME(Callable:D $self: |arguments)
This method is required for postfix:«( )» and postfix:«.( )». It's what makes 
an object actually call-able and needs to be overloaded to let a given object 
act like a routine. If the object needs to be stored in a &-sigiled container, 
is has to implement Callable.

class A does Callable {
submethod CALL-ME(|c){ 'called' }
}
my  = A;
say a(); # OUTPUT: «called␤»

That second "postfix" operator, means
say a.();  # also outputs "called"

but what is the "pipe c" signature doing for the submethod?

From: Simon Proctor 
Sent: Tuesday, February 11, 2020 3:17 AM
To: ToddAndMargo 
Cc: perl6-users 
Subject: Re: variable as subroutine?

If you can store a subroutine in a variable then you can pass said subroutine 
to another one as an argument.

This leads us into the joys of functional programming.

And you may have used it already and not even realised.

The .map and .grep methods (and .reduce and bunch of others) all expect a 
callable code block (that might be a subroutine) as a function.

This :

my @a = (1..10).map( * ** 2 )

and this :

my  = sub ($v) { $v ** 2 };
my @a = (1..10).map(  );

are doing the same thing. Except the second one has the  function available 
for other things.

(A Note on Marc's comment * * * is not the same as -> $x { $x * $x } it is the 
same  as -> $x, $y { $x * $y } )

You can then start doing things like storing functions as values in hashes and 
doing all *kinds* of fun stuff.

Welcome to the tip of the iceberg.

Simon


On Tue, 11 Feb 2020 at 03:21, ToddAndMargo via perl6-users 
mailto:perl6-users@perl.org>> wrote:
Hi All,

Is Larry using his magic powder again?

Can I declare a subroutine as a variable?

 my $abc = my sub (UInt $u, Str $s, Int $I) {

How would I use it?

And why would do such a thing?

-T


--
Simon Proctor
Cognoscite aliquid novum cotidie

http://www.khanate.co.uk/


Re: variable as subroutine?

2020-02-11 Thread Simon Proctor
If you can store a subroutine in a variable then you can pass said
subroutine to another one as an argument.

This leads us into the joys of functional programming.

And you may have used it already and not even realised.

The .map and .grep methods (and .reduce and bunch of others) all expect a
callable code block (that might be a subroutine) as a function.

This :

my @a = (1..10).map( * ** 2 )

and this :

my  = sub ($v) { $v ** 2 };
my @a = (1..10).map(  );

are doing the same thing. Except the second one has the  function
available for other things.

(A Note on Marc's comment * * * is not the same as -> $x { $x * $x } it is
the same  as -> $x, $y { $x * $y } )

You can then start doing things like storing functions as values in hashes
and doing all *kinds* of fun stuff.

Welcome to the tip of the iceberg.

Simon


On Tue, 11 Feb 2020 at 03:21, ToddAndMargo via perl6-users <
perl6-users@perl.org> wrote:

> Hi All,
>
> Is Larry using his magic powder again?
>
> Can I declare a subroutine as a variable?
>
>  my $abc = my sub (UInt $u, Str $s, Int $I) {
>
> How would I use it?
>
> And why would do such a thing?
>
> -T
>


-- 
Simon Proctor
Cognoscite aliquid novum cotidie

http://www.khanate.co.uk/


Re: variable as subroutine?

2020-02-10 Thread Marc Chantreux
hello ToddAndMargo,

> Can I declare a subroutine as a variable?

just use the callable sigil (https://docs.perl6.org/type/Callable).

those are 3 ways to write the same sub:

sub foo ($x) { $x * $x }
my  = -> $x { $x * $x }
my  = * * *;

regards,
marc


variable as subroutine?

2020-02-10 Thread ToddAndMargo via perl6-users

Hi All,

Is Larry using his magic powder again?

Can I declare a subroutine as a variable?

my $abc = my sub (UInt $u, Str $s, Int $I) {

How would I use it?

And why would do such a thing?

-T