I don't know much about PDL (the Perl Data Lanuage) but I do remember that the semicolon as a "higher-level" array separator in P6 is a nod to PDL. It is a bit of stub feature until someone needs it and specs out, prototypes more of that data-slicing style. It's likely under-documented due to that history.
-y On Sun, Apr 14, 2019 at 10:29 AM Joseph Brenner <doom...@gmail.com> wrote: > Richard Hainsworth <rnhainswo...@gmail.com> wrote: > > A semicolon is the syntax used for multidimensional arrays. > > > > See https://docs.perl6.org/language/subscripts#Multiple_dimensions > > Thanks. I was trying to help Bill with that question, and I couldn't > quite see what was going on there. You can't really do a web search > on "<computer language>" and ";" and expect to learn anything. > > And reading through that section on multidimensional arrays, it > doesn't immediately leap out why Bill would be seeing this behavior. > It's mostly a discussion of dereferencing complex data structures, not > creating them. Where it does create multiple levels it uses the > comma. > > > Richard Hainsworth <rnhainswo...@gmail.com> wrote: > > A semicolon is the syntax used for multidimensional arrays. > > > > See https://docs.perl6.org/language/subscripts#Multiple_dimensions > > > > > > On 14/04/2019 15:07, William Michels via perl6-users wrote: > >> Hello, > >> > >> I've been working through Patrick Michaud's excellent videos from the > >> The Perl Conference 2016. At about 35:45 of the following 2016 video > >> (Part 1 of 2), Patrick discusses arrays: > >> > >> https://www.youtube.com/watch?v=ySch4xpoPA0 > >> > >> At this point in the video, Patrick also discusses push() and pop() > >> calls on arrays. For practice I tried pushing and popping strings in > >> the REPL. However, I discovered an unusual property when I misplaced a > >> semicolon during call to push(). See what happens below when a > >> semicolon is included within the parentheses of push(): > >> > >> "This is Rakudo version 2018.12 built on MoarVM version 2018.12 > >> implementing Perl 6.d." > >> > >>> my @countries = "UK", "Spain", "Slovakia", "Sweden"; > >> [UK Spain Slovakia Sweden] > >>> @countries.push("Finland"); > >> [UK Spain Slovakia Sweden Finland] > >>> my @countries = "UK", "Spain", "Slovakia", "Sweden"; > >> [UK Spain Slovakia Sweden] > >>> @countries.push("Finland";) > >> [UK Spain Slovakia Sweden (Finland) ()] > >>> my @countries = "UK", "Spain", "Slovakia", "Sweden"; > >> [UK Spain Slovakia Sweden] > >>> @countries.push("Finland";); > >> [UK Spain Slovakia Sweden (Finland) ()] > >> > >> Misplacing a semicolon within the push() call adds two elements to the > >> array. When I examine these two elements, I see that they are both > >> "List" elements: > >> > >>> @countries[3].WHAT > >> (Str) > >>> @countries[4].WHAT > >> (List) > >>> @countries[5].WHAT > >> (List) > >> > >> Apparently, multiple semicolons within push() will add multiple list > >> elements to the end of the intended array: > >> > >>> my @countries = "UK", "Spain", "Slovakia", "Sweden"; > >> [UK Spain Slovakia Sweden] > >>> @countries.push("Finland";;); > >> [UK Spain Slovakia Sweden (Finland) () ()] > >>> my @countries = "UK", "Spain", "Slovakia", "Sweden"; > >> [UK Spain Slovakia Sweden] > >>> @countries.push(;;;;;;;); > >> [UK Spain Slovakia Sweden () () () () () () () ()] > >> > >> It is surprising to me that "List" elements are appended to the array > >> with push() as described above. If one tries to add one or more > >> elements via indexing and there 'aren't enough elements' so to speak > >> (by accident or design), the array grows by inserting "Any" elements, > >> not "List" elements: > >> > >>> my @countries = "UK", "Spain", "Slovakia", "Sweden"; > >> [UK Spain Slovakia Sweden] > >>> @countries[5] = "Finland"; > >> Finland > >>> say @countries > >> [UK Spain Slovakia Sweden (Any) Finland] > >>> my @countries = "UK", "Spain", "Slovakia", "Sweden"; > >> [UK Spain Slovakia Sweden] > >>> @countries[6..7] = "Finland", "Norway"; > >> (Finland Norway) > >>> say @countries > >> [UK Spain Slovakia Sweden (Any) (Any) Finland Norway] > >> > >> I've briefly checked pop() to see if there are similar issues, but 1) > >> placing a string within the parentheses of pop() will throw an error, > >> and 2) placing a semicolon within the parentheses of pop() will throw > >> an error. However, these error message are slightly different. A > >> string argument to pop() will result in an error that says "Too many > >> positionals passed; expected 1 argument but got 2" while a semicolon > >> argument to pop() will result in an error that says "Too many > >> positionals passed; expected 1 argument but got 3". > >> > >>> my @countries = "UK", "Spain", "Slovakia", "Sweden"; > >> [UK Spain Slovakia Sweden] > >>> @countries.pop("Finland") > >> Too many positionals passed; expected 1 argument but got 2 > >> in block <unit> at <unknown file> line 1 > >> > >>> @countries.pop(;) > >> Too many positionals passed; expected 1 argument but got 3 > >> in block <unit> at <unknown file> line 1 > >> > >> > >> Any help appreciated, > >> > >> Bill. > >> > >> William Michels, Ph.D. > >> > >> PS Thanks to Joe Brenner for talking over this Perl6 code with me. > > >