Re: Is this a bug?
Thank you. Silly me, thinking "this is so simple I don't need to run it through the command-line to test it." :-) Anway, yeah, say $_ for reverse lines Aaron Sherman, M.: P: 617-440-4332 Google Talk, Email and Google Plus: a...@ajs.com Toolsmith, developer, gamer and life-long student. On Mon, Sep 19, 2016 at 10:10 AM, Timo Paulssen wrote: > On 19/09/16 16:02, Aaron Sherman wrote: > > I'm guessing that what you meant was "say as a function was what I > > meant to use there." In which case: > > say for reverse lines > > or > > > for reverse lines { say } > > These are both valid ways of asking for each > element of the iterable > thing returned from lines to be printed with a > newline. > Watch out, this needs to read say $_ otherwise you would get an error > message: > > Unsupported use of bare "say"; in Perl 6 please use .say if you meant $_, > or use an explicit invocant or argument, or use &say to refer to the > function as a noun > >
Re: Is this a bug?
It may make it clearer if I explain the broader objective. I'm trying to learn P6 thoroughly by developing training courses to teach it from scratch. (Fans of Gerald Weinberg may recognise the idea.) Obviously, while doing so, I want to explore pathological cases, both to clarify the concepts and to anticipate the mistakes that students might make. Sometimes, it's necessary to do so to resolve ambiguities in whatever sources are available. The language is far too deep and complex to absorb in one pass, and contains a great deal which is of interest to advanced system software developers, but not to someone who just wants to do some simple processing or file manipulation. My aim is to develop a series of successively deeper courses, each of which will be complete within itself. The first level is procedural. O-O is the next. Topics should proceed logically from the basics, each building on the previous, without having to drag in extraneous topics or diversions. (Examples should not require forward references or bouncing around in the text.) That's why I don't want to introduce .say at this stage, if I can help it. On 9/18/16, Trey Harris wrote: > On Sun, Sep 18, 2016 at 16:49 Parrot Raiser <1parr...@gmail.com> wrote: > > say { $_ } was the correct thing to use there. (I'm trying to avoid >> any mention of O-O for the moment.) >> > “Trying to avoid any mention of O-O” seems like a Perl 6 obfuscation or > golf constraint, not a desirable development or learning goal. Perl 6 > doesn’t *force* you to write programs in an object-oriented style; you can > do it in functional or procedural or whatever style suits you. But you’re > going to have a bad time if you try to deny Perl 6’s fully OO nature. This > is in stark contrast to Perl 5, where OO was bolted on, and you could say > that the non-OO core was more “real” than the object-oriented sugar found > in modules you had to use. > > Writing something like say($_) for reverse lines — which is what I think is > closest to what you wanted — isn’t any more or less “object-oriented” than > the more idiomatic .say for reverse lines;. In Perl 5, some rather > byzantine rules governed the use of the implicit $_; almost all of the > convenience afforded by those rules can be gained through the use of > topicalized objects, so the byzantine rules are gone — but the convenience > is gone too unless you’re willing to use the topic in the .foo style. > > I think perhaps you see a dot, and dot signifies OO, so the .say... version > might *look* more OO than the say(... version in some sense, but that’s > pretty much cosmetic. You’re *using* some objects by interacting with the > Perl 6 core either way. It’s your choice not to write your logic in an OO > style, but you can’t prevent OO from happening during execution. > > (This really isn’t some half-hearted attempt to force you into OO through > the backdoor; you really can skip OO for all *your* logic. You just can’t > pretend you’re not using an object-oriented language when you have to touch > code you’re not in control of, whether an OO library or the Perl 6 core. > But pretty much the entirety of what you need to know about OO if you > choose to do that is various syntax and some desiderata about the calling > semantics.) > > say {} was a "what happens if I do this" exercise. >> >> What is this -> ;; $_? is raw { #`(Block|170303864) … } output? >> >> On 9/18/16, Brent Laabs wrote: >> > Remember you can call a block with parentheses: >> > >> >> say { 11 + 31 }; >> > -> ;; $_? is raw { #`(Block|140268472711224) ... } >> >> say { 11 + 31 }(); >> > 42 >> > >> > >> > On Sun, Sep 18, 2016 at 12:58 PM, Elizabeth Mattijsen >> > wrote: >> > >> >> I think you want: >> >> >> >> .say for reverse lines; >> >> >> >> not sure what you are trying to achieve otherwise, but: >> >> >> >>say { } >> >> >> >> producing something like >> >> >> >>-> ;; $_? is raw { #`(Block|170303864) … } >> >> >> >> feels entirely correct to me. :-) >> >> >> >> >> >> Liz >> >> >> >> > On 18 Sep 2016, at 21:52, Parrot Raiser <1parr...@gmail.com> wrote: >> >> > >> >> > This code: >> >> > 1 #! /home/guru/bin/perl6 >> >> > 2 >> >> > 3 # Ask for some lines and output them in reverse >> >> > 4 # Work out the appropriate EOF symbol for the OS >> >> > 5 >> >> > 6 my $EOF = "CTRL-" ~ ($*DISTRO.is-win ?? "Z" !! "D"); >> >> > 7 >> >> > 8 say "Please enter some lines and end them with $EOF"; >> >> > 9 >> >> > 10 say { for reverse lines() {} }; >> >> > 11 >> >> > 12 # End >> >> > produces this: >> >> > Please enter some lines and end them with CTRL-D# obviously from >> >> line 8 >> >> > -> ;; $_? is raw { #`(Block|170303864) ... }# >> >> > but >> >> this? >> >> >> >> >> > >> > >
Re: Is this a bug?
On 19/09/16 16:02, Aaron Sherman wrote: > I'm guessing that what you meant was "say as a function was what I > meant to > use there." In which case: > > say for reverse lines > > or > > for reverse lines { say } > > These are both valid ways of asking for each element of the iterable > thing returned from lines to be printed with a newline. Watch out, this needs to read say $_ otherwise you would get an error message: Unsupported use of bare "say"; in Perl 6 please use .say if you meant $_, or use an explicit invocant or argument, or use &say to refer to the function as a noun
Re: Is this a bug?
I'm guessing that what you meant was "say as a function was what I meant to use there." In which case: say for reverse lines or for reverse lines { say } These are both valid ways of asking for each element of the iterable thing returned from lines to be printed with a newline. But remember that any {} around code creates a Block in Perl 6, and a Block is a first-class object. If you ask say to print a Block, it will quite happily try to do that. Aaron Sherman, M.: P: 617-440-4332 Google Talk, Email and Google Plus: a...@ajs.com Toolsmith, developer, gamer and life-long student. On Sun, Sep 18, 2016 at 4:49 PM, Parrot Raiser <1parr...@gmail.com> wrote: > say { $_ } was the correct thing to use there. (I'm trying to avoid > any mention of O-O for the moment.) > say {} was a "what happens if I do this" exercise. > > What is this -> ;; $_? is raw { #`(Block|170303864) … } output? > > On 9/18/16, Brent Laabs wrote: > > Remember you can call a block with parentheses: > > > >> say { 11 + 31 }; > > -> ;; $_? is raw { #`(Block|140268472711224) ... } > >> say { 11 + 31 }(); > > 42 > > > > > > On Sun, Sep 18, 2016 at 12:58 PM, Elizabeth Mattijsen > > wrote: > > > >> I think you want: > >> > >> .say for reverse lines; > >> > >> not sure what you are trying to achieve otherwise, but: > >> > >>say { } > >> > >> producing something like > >> > >>-> ;; $_? is raw { #`(Block|170303864) … } > >> > >> feels entirely correct to me. :-) > >> > >> > >> Liz > >> > >> > On 18 Sep 2016, at 21:52, Parrot Raiser <1parr...@gmail.com> wrote: > >> > > >> > This code: > >> > 1 #! /home/guru/bin/perl6 > >> > 2 > >> > 3 # Ask for some lines and output them in reverse > >> > 4 # Work out the appropriate EOF symbol for the OS > >> > 5 > >> > 6 my $EOF = "CTRL-" ~ ($*DISTRO.is-win ?? "Z" !! "D"); > >> > 7 > >> > 8 say "Please enter some lines and end them with $EOF"; > >> > 9 > >> > 10 say { for reverse lines() {} }; > >> > 11 > >> > 12 # End > >> > produces this: > >> > Please enter some lines and end them with CTRL-D# obviously from > >> line 8 > >> > -> ;; $_? is raw { #`(Block|170303864) ... }# but > >> this? > >> > >> > > >
Re: Is this a bug?
On Sun, Sep 18, 2016 at 16:49 Parrot Raiser <1parr...@gmail.com> wrote: say { $_ } was the correct thing to use there. (I'm trying to avoid > any mention of O-O for the moment.) > “Trying to avoid any mention of O-O” seems like a Perl 6 obfuscation or golf constraint, not a desirable development or learning goal. Perl 6 doesn’t *force* you to write programs in an object-oriented style; you can do it in functional or procedural or whatever style suits you. But you’re going to have a bad time if you try to deny Perl 6’s fully OO nature. This is in stark contrast to Perl 5, where OO was bolted on, and you could say that the non-OO core was more “real” than the object-oriented sugar found in modules you had to use. Writing something like say($_) for reverse lines — which is what I think is closest to what you wanted — isn’t any more or less “object-oriented” than the more idiomatic .say for reverse lines;. In Perl 5, some rather byzantine rules governed the use of the implicit $_; almost all of the convenience afforded by those rules can be gained through the use of topicalized objects, so the byzantine rules are gone — but the convenience is gone too unless you’re willing to use the topic in the .foo style. I think perhaps you see a dot, and dot signifies OO, so the .say... version might *look* more OO than the say(... version in some sense, but that’s pretty much cosmetic. You’re *using* some objects by interacting with the Perl 6 core either way. It’s your choice not to write your logic in an OO style, but you can’t prevent OO from happening during execution. (This really isn’t some half-hearted attempt to force you into OO through the backdoor; you really can skip OO for all *your* logic. You just can’t pretend you’re not using an object-oriented language when you have to touch code you’re not in control of, whether an OO library or the Perl 6 core. But pretty much the entirety of what you need to know about OO if you choose to do that is various syntax and some desiderata about the calling semantics.) say {} was a "what happens if I do this" exercise. > > What is this -> ;; $_? is raw { #`(Block|170303864) … } output? > > On 9/18/16, Brent Laabs wrote: > > Remember you can call a block with parentheses: > > > >> say { 11 + 31 }; > > -> ;; $_? is raw { #`(Block|140268472711224) ... } > >> say { 11 + 31 }(); > > 42 > > > > > > On Sun, Sep 18, 2016 at 12:58 PM, Elizabeth Mattijsen > > wrote: > > > >> I think you want: > >> > >> .say for reverse lines; > >> > >> not sure what you are trying to achieve otherwise, but: > >> > >>say { } > >> > >> producing something like > >> > >>-> ;; $_? is raw { #`(Block|170303864) … } > >> > >> feels entirely correct to me. :-) > >> > >> > >> Liz > >> > >> > On 18 Sep 2016, at 21:52, Parrot Raiser <1parr...@gmail.com> wrote: > >> > > >> > This code: > >> > 1 #! /home/guru/bin/perl6 > >> > 2 > >> > 3 # Ask for some lines and output them in reverse > >> > 4 # Work out the appropriate EOF symbol for the OS > >> > 5 > >> > 6 my $EOF = "CTRL-" ~ ($*DISTRO.is-win ?? "Z" !! "D"); > >> > 7 > >> > 8 say "Please enter some lines and end them with $EOF"; > >> > 9 > >> > 10 say { for reverse lines() {} }; > >> > 11 > >> > 12 # End > >> > produces this: > >> > Please enter some lines and end them with CTRL-D# obviously from > >> line 8 > >> > -> ;; $_? is raw { #`(Block|170303864) ... }# but > >> this? > >> > >> > > >
Re: Is this a bug?
On Sun, Sep 18, 2016 at 4:49 PM, Parrot Raiser <1parr...@gmail.com> wrote: > What is this -> ;; $_? is raw { #`(Block|170303864) … } output? It's the gist of a Block, which is what you asked for when you did a `say` on an executable block. Why do you believe `say { $_ }` is the right thing there? What were you expecting it to do? -- brandon s allbery kf8nh sine nomine associates allber...@gmail.com ballb...@sinenomine.net unix, openafs, kerberos, infrastructure, xmonadhttp://sinenomine.net
Re: Is this a bug?
It is the .perl representation of a Block. > On 18 Sep 2016, at 22:49, Parrot Raiser <1parr...@gmail.com> wrote: > > say { $_ } was the correct thing to use there. (I'm trying to avoid > any mention of O-O for the moment.) > say {} was a "what happens if I do this" exercise. > > What is this -> ;; $_? is raw { #`(Block|170303864) … } output? > > On 9/18/16, Brent Laabs wrote: >> Remember you can call a block with parentheses: >> >>> say { 11 + 31 }; >> -> ;; $_? is raw { #`(Block|140268472711224) ... } >>> say { 11 + 31 }(); >> 42 >> >> >> On Sun, Sep 18, 2016 at 12:58 PM, Elizabeth Mattijsen >> wrote: >> >>> I think you want: >>> >>> .say for reverse lines; >>> >>> not sure what you are trying to achieve otherwise, but: >>> >>> say { } >>> >>> producing something like >>> >>> -> ;; $_? is raw { #`(Block|170303864) … } >>> >>> feels entirely correct to me. :-) >>> >>> >>> Liz >>> On 18 Sep 2016, at 21:52, Parrot Raiser <1parr...@gmail.com> wrote: This code: 1 #! /home/guru/bin/perl6 2 3 # Ask for some lines and output them in reverse 4 # Work out the appropriate EOF symbol for the OS 5 6 my $EOF = "CTRL-" ~ ($*DISTRO.is-win ?? "Z" !! "D"); 7 8 say "Please enter some lines and end them with $EOF"; 9 10 say { for reverse lines() {} }; 11 12 # End produces this: Please enter some lines and end them with CTRL-D# obviously from >>> line 8 -> ;; $_? is raw { #`(Block|170303864) ... }# but >>> this? >>> >>> >>
Re: Is this a bug?
say { $_ } was the correct thing to use there. (I'm trying to avoid any mention of O-O for the moment.) say {} was a "what happens if I do this" exercise. What is this -> ;; $_? is raw { #`(Block|170303864) … } output? On 9/18/16, Brent Laabs wrote: > Remember you can call a block with parentheses: > >> say { 11 + 31 }; > -> ;; $_? is raw { #`(Block|140268472711224) ... } >> say { 11 + 31 }(); > 42 > > > On Sun, Sep 18, 2016 at 12:58 PM, Elizabeth Mattijsen > wrote: > >> I think you want: >> >> .say for reverse lines; >> >> not sure what you are trying to achieve otherwise, but: >> >>say { } >> >> producing something like >> >>-> ;; $_? is raw { #`(Block|170303864) … } >> >> feels entirely correct to me. :-) >> >> >> Liz >> >> > On 18 Sep 2016, at 21:52, Parrot Raiser <1parr...@gmail.com> wrote: >> > >> > This code: >> > 1 #! /home/guru/bin/perl6 >> > 2 >> > 3 # Ask for some lines and output them in reverse >> > 4 # Work out the appropriate EOF symbol for the OS >> > 5 >> > 6 my $EOF = "CTRL-" ~ ($*DISTRO.is-win ?? "Z" !! "D"); >> > 7 >> > 8 say "Please enter some lines and end them with $EOF"; >> > 9 >> > 10 say { for reverse lines() {} }; >> > 11 >> > 12 # End >> > produces this: >> > Please enter some lines and end them with CTRL-D# obviously from >> line 8 >> > -> ;; $_? is raw { #`(Block|170303864) ... }# but >> this? >> >> >
Re: Is this a bug?
Remember you can call a block with parentheses: > say { 11 + 31 }; -> ;; $_? is raw { #`(Block|140268472711224) ... } > say { 11 + 31 }(); 42 On Sun, Sep 18, 2016 at 12:58 PM, Elizabeth Mattijsen wrote: > I think you want: > > .say for reverse lines; > > not sure what you are trying to achieve otherwise, but: > >say { } > > producing something like > >-> ;; $_? is raw { #`(Block|170303864) … } > > feels entirely correct to me. :-) > > > Liz > > > On 18 Sep 2016, at 21:52, Parrot Raiser <1parr...@gmail.com> wrote: > > > > This code: > > 1 #! /home/guru/bin/perl6 > > 2 > > 3 # Ask for some lines and output them in reverse > > 4 # Work out the appropriate EOF symbol for the OS > > 5 > > 6 my $EOF = "CTRL-" ~ ($*DISTRO.is-win ?? "Z" !! "D"); > > 7 > > 8 say "Please enter some lines and end them with $EOF"; > > 9 > > 10 say { for reverse lines() {} }; > > 11 > > 12 # End > > produces this: > > Please enter some lines and end them with CTRL-D# obviously from > line 8 > > -> ;; $_? is raw { #`(Block|170303864) ... }# but > this? > >
Re: Is this a bug?
I think you want: .say for reverse lines; not sure what you are trying to achieve otherwise, but: say { } producing something like -> ;; $_? is raw { #`(Block|170303864) … } feels entirely correct to me. :-) Liz > On 18 Sep 2016, at 21:52, Parrot Raiser <1parr...@gmail.com> wrote: > > This code: > 1 #! /home/guru/bin/perl6 > 2 > 3 # Ask for some lines and output them in reverse > 4 # Work out the appropriate EOF symbol for the OS > 5 > 6 my $EOF = "CTRL-" ~ ($*DISTRO.is-win ?? "Z" !! "D"); > 7 > 8 say "Please enter some lines and end them with $EOF"; > 9 > 10 say { for reverse lines() {} }; > 11 > 12 # End > produces this: > Please enter some lines and end them with CTRL-D# obviously from line 8 > -> ;; $_? is raw { #`(Block|170303864) ... }# but this?