Thank for sharing, I'll watch right now On Wed, Feb 12, 2020 at 4:28 PM William Michels <w...@caa.columbia.edu> 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 <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 <guedes.aureli...@gmail.com> >>> *Sent:* Tuesday, February 11, 2020 7:00 PM >>> *To:* Andy Bach <andy_b...@wiwb.uscourts.gov>; perl6-users < >>> perl6-us...@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 <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 <unit> at <unknown file> 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'? >>> ------> <BOL>⏏$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 <guedes.aureli...@gmail.com> >>> *Sent:* Tuesday, February 11, 2020 6:36 PM >>> *To:* Andy Bach <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 <unit> at <unknown file> line 1 >>> >>> > $a[0](2) >>> ===SORRY!=== Error while compiling: >>> Variable '$a' is not declared. Did you mean '@a'? >>> ------> <BOL>⏏$a[0](2) >>> >>> >>> >>> On Tue, Feb 11, 2020 at 8:43 PM Andy Bach <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 &foo = * **2; >>> { ... } >>> > foo(4); >>> 16 >>> > my &c = * **2; >>> { ... } >>> > say c(4); >>> 16 >>> >>> >>> >>> >>> >>> ------------------------------ >>> *From:* Simon Proctor <simon.proc...@gmail.com> >>> *Sent:* Tuesday, February 11, 2020 9:27 AM >>> *To:* Andy Bach <andy_b...@wiwb.uscourts.gov> >>> *Cc:* perl6-users <perl6-us...@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 &ident = {$_}; >>> my &sq = {$_ * $_}; >>> sub trinar( &test, &true, &false, *@values ) { @values.map( -> $v { >>> &test($v) ?? &true($v) !! &false($v) } ) }; >>> trinar( *.is-prime, &sq,&ident, ^30 ).say >>> >>> Enjoy. ;) >>> >>> On Tue, 11 Feb 2020 at 15:22, Andy Bach <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 &foo = -> $x { $x * $x } >>> my &foo = * * *; >>> >>> > A Note on Marc's comment: >>> my &foo = * * * >>> is not the same as: >>> my &foo = -> $x { $x * $x } >>> it is the same as: >>> my &foo = -> $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 = 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 <simon.proc...@gmail.com> >>> *Sent:* Tuesday, February 11, 2020 3:17 AM >>> *To:* ToddAndMargo <toddandma...@zoho.com> >>> *Cc:* perl6-users <perl6-us...@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 &sq = sub ($v) { $v ** 2 }; >>> my @a = (1..10).map( &sq ); >>> >>> are doing the same thing. Except the second one has the &sq 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-us...@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/ >>> >>> >>> >>> -- >>> Aureliano Guedes >>> skype: aureliano.guedes >>> contato: (11) 94292-6110 >>> whatsapp +5511942926110 >>> >>> >>> >>> -- >>> Aureliano Guedes >>> skype: aureliano.guedes >>> contact: (11) 94292-6110 >>> WhatsApp +5511942926110 >>> >> >> >> -- >> Aureliano Guedes >> skype: aureliano.guedes >> contato: (11) 94292-6110 >> whatsapp +5511942926110 >> > -- Aureliano Guedes skype: aureliano.guedes contato: (11) 94292-6110 whatsapp +5511942926110