This channel is intended for people just starting with the Raku Programming Language ( Logs are available at
Set by lizmat on 8 June 2022.
01:16 razetime joined 03:56 razetime left 05:41 siavash joined 08:15 teatwo left, tea3po joined 08:16 tea3po left, tea3po joined 08:17 tea3po left 08:48 razetime joined 09:13 teatime joined 10:15 NemokoschKiwi joined 10:23 NemokoschKiwi left 10:36 siavash left 13:33 razetime left 14:33 NemokoschKiwi joined 14:36 Tirifto_ left 14:39 Tirifto joined 14:40 Tirifto left 14:41 Tirifto joined
jgaz In Raku, how do I match N of some repeating character? I tried ~~ /\d{3}/ but that appears to be wrong. 16:48
nemokosch using the ** operator 16:49
\d ** 3
jgaz thanks... why the change in syntax from {n}?
Also, will that break something like /^^\d ** 3 1/ where I'm looking for any 3 digits at the start of a string followed by a one? 16:51
nemokosch I wouldn't know by heart if {} has a special meaning inside regexes but I don't particularly fancy that syntax either 16:54
Raku regexes were designed to be pleasant and readable, not compatible with one of the dozen of ad-hoc regex dialects 16:55
I think that's perfectly fine for "any 3 digits followed by a 1, right after the beginning of the line" 16:56
I think ^^ is for lines
jgaz It certainly helps ditch the line-noise comparison. Thanks for the help. 16:58
antononcube It does -- it specifies a code to be executed together with parsing by the regex. For example, it is a way to include make statements in a grammar. (I.e. not to have a separate class for the actions.) 17:30
nemokosch I just clicked on this issue
antononcube Hmm... I think I read that in the book "Parsing with Perl 6 Regexes and Grammars: A Recursive Descent into Parsing" by Moritz Lenz. 17:31
Yeah, see page end of Chapter 4 fo that book. (Page 46.) 17:33
| Syntax | Description | |---|---| | `{ CODE }` | runs perl 6 code; no effect on regex match. | | `<?{ CODE }>` | Code needs to return a true value for the match to succeed. | | `<!{ CODE }>` | Code needs to return a false value for the match to succeed. | | `<{ CODE }>` | result of code is interpreted as a regex. | | `<$STRING>` | Interprets $STRING as regex source code. | 17:38
I made the Markdown table above looking at book's table 4-3. 17:39
nemokosch manually or using some magical tool you created? ^^ 17:40
17:40 NemokoschKiwi left
antononcube You are so sharp!! Yes, using the "magical tool" I created. 🙂 17:43
Here is a proof screenshot. But in all fairness this could have been done over the Web interfaces of OpenAI and Bard/PaLM. 17:46
nemokosch where is the input, though? 17:50
antononcube Hmmm... I think the input is obvious; the green text. 17:51
nemokosch what is $^a $^b then?
oh okay nevermind 17:52
the wall of text in the middle
but the interesting part would be getting that wall of text 😛
antononcube Here is the code I used: use LLM::Functions; ‌‌my &fmdt = llm-function({"Convert to a Markdown table with columns $^a the text: $^b."}, llm-evaluator=>'PaLM'); ‌‌&fmdt('"Syntax" and "Description"', 'Syntax { CODE } <?{ CODE }> <!{ CODE }> <{ CODE }> <$STRING> Description runs perl 6 code; no effect on regex match. Code needs to return a true value for the match to succeed. Code needs to return a
false value for the match to succeed.
Yes, I looked up the table from the book. (To get the text.) 17:53
The "magic" was to use an LLM to "transpose" the text into two column Markdown table. 17:54
Here is a similar result using Bard's interface directly: 17:57
19:31 ab5tract joined 20:06 ab5tract left
librasteve {} in regexes was repurposed to call a function (similar to {} in strings) 20:11
20:14 teatwo joined 20:17 teatime left 20:24 teatwo left, teatwo joined 20:47 ab5tract joined 21:17 ab5tract left 21:32 wafflus joined
wafflus how do i defeine a new operator ? i tried this and it didn't work: 21:33
nemokosch The REPL is not clever enough to remember operators from previous reads 21:34
wafflus it works if i say type x but not for unicode symbols 21:35
nemokosch Other than that, i think you're doing it right
wafflus k
lizmat the problem is that the infix sub *is* defined and accessible, but the grammar tweak isn't
in the REPL 21:36
nemokosch x exists as a built-in, probably that's why it worked
It didn't have to be grammar-tweaked
wafflus ok i will test
lizmat if it is non-existing, the grammar needs to be tweaked :-)
wafflus ok it works ty 21:38
does anyone know if i can view all the methods and paramters on an object? atm i'm having to look up using an internet search and it doesn't feel too nice 21:40
nemokosch If you don't mind digging into the metamodel, sure 21:49
There is $obj.^attributes, for example
Similarly, there is $obj.^methods 21:50
wafflus yeah just accidently discoverd that one just now
thowe What's the best way to sort by two things? I want to sort by a name alphabetically, and then sort by a numeric value under the name. Kind of like two order by fields in a SQL query... These fields are hash values in an array of hashes. 22:00
oh, wait... is that built in? 22:01
22:03 wafflus left
thowe bloody hell, that was easy. I love Raku. 22:06
antononcube @thowe 🤔 Can you give an example? 22:11
thowe my @newlist = @service_list.sort: {.<customer>, .<service_name>, .<service>};
isn't there a shortcut for making the sorted list @service_list instead of making a new array "@newlist" ? 22:12
nemokosch .=sort 22:13
thowe of course...
nemokosch Watch out, you can't chain on the left handside, it has precedence as high as a usual method call
Right handside 22:14
Casually mixing up left and right just like that
thowe so is this wrong? : @service_list.=sort: {.<customer>, .<service_name>, .<service>};
nemokosch This will DWYM 22:15
thowe yeah, I already tested it, just didn't want to fall into a trap
nemokosch If you use the colon syntax for arguments, you probably won't have a lot of temptation to chain on the right 😛 22:16
thowe Cool. Now I used Raku to help me finish my audit before billing instead of Perl... \o/ I did a thing! I'm so easily entertained. 22:20
22:32 ab5tract joined 22:43 ab5tract left