00:17
bdju left
00:38
sorenson joined
|
|||
sorenson | Does anyone here use NixOS and have suggestions on how to use Zef/Raku modules on NixOS? | 00:39 | |
antononcube | 🤷♂️ | 00:43 | |
01:28
kylese left
01:29
kylese joined
01:43
guifa left
01:47
MasterDuke joined
|
|||
tbrowder | i need to extract N items from an array into another array. i can do that with shift and push one item at a time. | 01:50 | |
MasterDuke | splice | 01:51 | |
tbrowder | ah, thnx. | ||
yep, right at the end with prepend after shift and friends in the docs, i always stop reading too soon | 01:55 | ||
02:09
guifa joined
02:13
Xliff left
02:15
kylese left,
kylese joined
03:10
guifa left
03:12
Aedil joined
05:30
Sgeo left
05:53
derpydoo joined
06:15
guifa joined
06:19
guifa left
07:43
sena_kun joined
07:54
dakkar joined
08:22
derpydoo left
|
|||
lizmat | re splice: a pattern that I frequently use for "push this to an array, move the whole array to another array and clean out the original array, is: | 08:24 | |
my @b := @a.push("foo").splice; | |||
08:35
derpydoo joined
|
|||
ab5tract | also with the current splice implementation its worth pointing out that you have to be pretty verbose when splicing in arrays as elements | 09:17 | |
m: my @a = 1,2,3; @a.splice(1,1,[$[5,6],]); dd @a | |||
camelia | [1, [5, 6], 3] | ||
ab5tract | working on cleaning this up for 6e | 09:18 | |
09:31
sena_kun left
09:50
derpydoo left
|
|||
tbrowder | lizmat: thnx. the docs are confusing to me. i finally get how to remove elements, but it's not clear how to capture those removed. the docs do say returns but i can't do: @b = @a.splice(2); also the term is misleading: splice to me means join things, not remove things | 10:50 | |
lizmat | well, the name was inherited from Perl | 10:51 | |
and the part of taking out is followed by a part of joining | 10:52 | ||
tbrowder | m: my @a = 1,2,3; my @b := @a.splice(2); | ||
camelia | ( no output ) | ||
lizmat | m: my @a = 1,2,3; my @b := @a.splice(2); dd @a, @b | 10:54 | |
camelia | [1, 2] [3] |
||
lizmat | m: my @a = 1,2,3; my @b := @a.splice(2); dd @a, @b; @b.push(42) | 10:55 | |
camelia | [1, 2] [3] |
||
lizmat | m: my @a = 1,2,3; my @b := @a.splice(2); dd @a, @b; @b.push(42); dd @b | ||
camelia | [1, 2] [3] [3, 42] |
||
lizmat | m: my @a = 1,2,3,4,5; my @b := @a.splice(2,1); dd @a, @b; @b.push(42); dd @b | ||
camelia | [1, 2, 4, 5] [3] [3, 42] |
||
tbrowder | m: my @a =1,2,3; my @b := @a.splice(2); dd @b; dd @a; | 10:57 | |
camelia | [3] [1, 2] |
||
tbrowder | m: my @a = 1,2,3; my @b.push(@a.slice(2)); dd @a; dd @b: | 11:00 | |
camelia | [1, 2, 3] No such method 'dd' for invocant of type 'Array' in block <unit> at <tmp> line 1 |
||
lizmat | m: m: my @a = 1,2,3; (my @b).push(@a.slice(2)); dd @a; dd @b: | 11:01 | |
camelia | [1, 2, 3] No such method 'dd' for invocant of type 'Array' in block <unit> at <tmp> line 1 |
||
lizmat | m: m: my @a = 1,2,3; (my @b).push(@a.slice(2)); dd @a; dd @b; | ||
camelia | [1, 2, 3] [(3,).Seq,] |
||
lizmat | m: m: my @a = 1,2,3; (my @b).append(@a.slice(2)); dd @a; dd @b; | 11:02 | |
camelia | [1, 2, 3] [3] |
||
tbrowder | m: my @a = 1,2,3; my @b = @a[0..^2]; @a.slice(2); dd @a; dd @b; | 11:05 | |
camelia | [1, 2, 3] [1, 2] |
||
tbrowder | ?? | 11:06 | |
lizmat | that's .slice, not .splice | 11:13 | |
tbrowder | erg... | 11:15 | |
m: my @a =1,2,3; my @b = @a[0..^2]; @a.splice(2); dd @a; dd @b; | 11:17 | ||
camelia | [1, 2] [1, 2] |
||
tbrowder | m: my @a=1,2"3; @a.slice(2); dd @a | 11:20 | |
camelia | ===SORRY!=== Error while compiling <tmp> Two terms in a row at <tmp>:1 ------> my @a=1,2⏏"3; @a.slice(2); dd @a expecting any of: infix infix stopper postfix statement end st… |
||
tbrowder | m: my @a = 1,2,3; @a.slice(2); dd @a | 11:21 | |
camelia | [1, 2, 3] | ||
tbrowder | ok, tink i got it... | 11:27 | |
m: my @a=1,2,3; my @b = @a.splice(0,2); say @a.raku; say @b.raku | 11:28 | ||
camelia | [3] [1, 2] |
||
lizmat | perhaps "eject" would be a better name than "splice" | ||
tbrowder | fer sure! | 11:30 | |
11:30
MasterDuke left
|
|||
tbrowder | remove, extract | 11:30 | |
slice | 11:31 | ||
pare | |||
or add a number to pop and shift | 11:32 | ||
lizmat | pop and shift only work from the end / start | ||
tbrowder | yes, but that's my main use here. i'm given a list of names that need to be removed 8 at a time to make a sheet of name tags. | 11:34 | |
etc. | |||
while @names.elems >= 8 { my @list = @names.shift(8); ...} | 11:36 | ||
i'll bet a popsicle that would be a popular addition to Raku | 11:39 | ||
seriously, it should be easy to do and be within the spirit of current core routine names | 11:44 | ||
lizmat | @list.batch(8) | 11:50 | |
tbrowder: ^^ | 11:58 | ||
tbrowder | hm...ex | 12:18 | |
ok, but it doesn't remove the elements | 12:21 | ||
didn't know about .batch | 12:22 | ||
oh, i see... | 12:24 | ||
that will work for me. just have to experiment a bit. thnx! (but i still like pop and shift with numbers) | 12:26 | ||
for now i'll just use the splice 'cause it works better for my brain... | 12:28 | ||
dutchie | is there an easy way to do something like `sub MAIN(Int $i)` and have it accept negative numbers? i think it's assuming they are option arguments and then complaining they aren't recognised | 12:35 | |
lizmat | sub MAIN(Int $i where $i < 0) | 12:39 | |
12:46
jgaz joined
|
|||
nahita3882 | raku your_prog.raku -- -75 is an option; "--" is used to signal that flags are over, rest are positional direct arguments and particularly useful when your arg starts with a dash | 13:04 | |
antononcube | @lizmat The best ChatGPT model produces long and wrong answer of your splice-pattern stated above: | 13:11 | |
cdn.discordapp.com/attachments/633...b3bd5& | |||
Other of OpenAI's ChatGPT produce similiar non-working results. | |||
dutchie | yeah, -- is an option but kind of annoying when I know the program doesn't accept any options at all, just a single numeric argument that might be positive or negative | 13:13 | |
lizmat | s/push/append would make it more correct | ||
nahita3882 | dutchie: you also have the option to supply a custom ARGS-TO-CAPTURE | 13:14 | |
lizmat | multi sub MAIN(Int $i where $i < 0) ?? | ||
nahita3882 | lizmat: constraint isn't the issue; it's that -12 is parsed as "12" => True as an argument, i.e., a flag | ||
lizmat | aaah... ok | ||
dutchie | I was wondering if ARGS-TO-CAPTURE was going to be the answer | ||
nahita3882 | dutchie: sub ARGS-TO-CAPTURE(&, @args) { \(@args.head.Int) } is an example | ||
dutchie | mm, that looks plausible | 13:15 | |
13:42
Geth joined
|
|||
tbrowder | lizmat: on second thought, batch should work fine. | 14:06 | |
lizmat | also: if you have 8 items of information, you might want to consider creating a class for it :-) | 14:07 | |
.oO( what was the age field again: element 5 or 6? ) |
|||
tbrowder | nah, each element is a string “first last” for a label, 2 labels per row, 4 rows per Letter page | 14:10 | |
may be diff for A4 | 14:11 | ||
but, would you accept a raku issue to add pop/shift wit numeric args? | 14:12 | ||
single positive int | 14:13 | ||
not zero | |||
lizmat | would be more like a problem solving issue I'd say, implementation would be trivial | 14:14 | |
tbrowder | ok | ||
14:16
silug left
14:24
silug joined
|
|||
librasteve | hi folks, I am trying to improve my functional style coding skills, but struggling with this (see code in this gist gist.github.com/librasteve/fb6b375...a370d19f4) | 14:31 | |
[Coke] | whew. my m2 mac was only booting into recovery mode last night and I couldn't get it back - tried reinstalling the OS, disk fix, nothing. It rebooted cleanly today. | ||
(-12) I have a similar issue with needing to support 'cal -3' | 14:32 | ||
librasteve | the bit I would like a steer on is lines 47-49 ... seems like the cleanest I can do is to repeat the variable names three times ... maybe if there was an attribute pair syntax :$^name on same lines as :$!name for OO attrs I would be able to cut from 3x to 2x... any f/back very welcome | 14:33 | |
14:34
mearp joined
|
|||
mearp | \n | 14:34 | |
librasteve | [Coke] did you health check the SSD? was it running hot? | ||
[Coke] | there was no way to check that from recovery screen that I could see. | 14:35 | |
librasteve | whew indeed - maybe a trip to the Apple store genius bar? | ||
well I meant after it came back | |||
[Coke] | It did say that the root volume was encrypted, which I was suprised about | ||
antononcube | @librasteve "I am trying to improve my functional style coding skills [...]" -- Start using Mathematica more often. | ||
librasteve | hmmm a coding language you have to pay for | ||
antononcube | No, not true, I keep correcting these kind of statements here. | 14:36 | |
Wolfram Engine (www.wolfram.com/engine/) is free for developers. Requires developer registration with email. | 14:37 | ||
lizmat | m: say "camelCase".subst( / <lower>+ )> <upper>/, {$/.tc ~ " "}) ~ ": "' | ||
camelia | ===SORRY!=== Error while compiling <tmp> Two terms in a row at <tmp>:1 ------> wer>+ )> <upper>/, {$/.tc ~ " "}) ~ ": "⏏' expecting any of: infix infix stopper postfix statement end … |
||
lizmat | m: say "camelCase".subst( / <lower>+ )> <upper> /, { $/.tc ~ " " }) ~ ": " | 14:38 | |
camelia | Camel Case: | ||
lizmat | librasteve why use subst here? $name.subst( /(.*)/, {"<.$0>"} ); | 14:40 | |
"<.$name>" would do the trick, no ? | |||
also: | 14:41 | ||
@names.map: *.&camel2label; can be written as: | |||
@names.map: &camel2label; | |||
aka, no need for the *. | |||
librasteve | I think my small business counts as a business for Wolfram audit purposes ... anyway free as in birds not just free as in beer | 14:42 | |
antononcube | Sure. But we were talking about improving functional programming skills. (Not business products.) | 14:43 | |
librasteve | lizmat: thanks for the tips, the last two are good, the first mayhave been mangled by Discord | 14:51 | |
lizmat | gist.github.com/lizmat/baa0a17630d...f7bead1be7 | 14:52 | |
librasteve | oh - looks up )> | 14:53 | |
m: say "camelCaseMoreBits".subst( / <lower>+ )> <upper> /, { $/.tc ~ " " }) ~ ": " | 14:55 | ||
evalable6__ | Camel CaseMoreBits: | ||
Raku eval | Camel CaseMoreBits: | ||
librasteve | oh - the capture marker | ||
lizmat | yup | 14:56 | |
librasteve | thanks! | 14:57 | |
lizmat | yw! | 14:58 | |
m: say "camelCase".subst( / <.lower>+ )> <.upper> /, { $/.tc ~ " " }) ~ ": " | |||
camelia | Camel Case: | ||
lizmat | the lower / upper don't need capturing, so don't :-) | 14:59 | |
should help if this is in a hot loop | |||
m: say "camelCase".subst( / <.lower>+ )> <.upper> /, { "$/.tc() " }) ~ ": " | |||
camelia | Camel Case: | ||
lizmat | alternate subst body | 15:00 | |
ab5tract | m: say "camelCase".subst( / <.lower>+ )> <.upper> /, { "$/.tc() " }) ~ ": " | 15:01 | |
camelia | Camel Case: | ||
ab5tract | m: say "camelCase".subst: / <.lower>+ )> <.upper> /, { "$/.tc() " } andthen .Str ~ ": " | ||
camelia | WARNINGS for <tmp>: Camel Case Useless use of "~" in expression ".Str ~ \": \"" in sink context (line 1) |
||
ab5tract | huh... well, the parentheses bother my eyes when reading it, but the above is cleary not the solution :) | 15:02 | |
antononcube | I am not sure what the goal is, but this code does convert camelCase into Title Case: "camelCaseMoreBits".match(/ ([<.lower>+]?) ([<upper> <.lower>+ ])+ /).values».Str.tc.raku # "Camel Case More Bits" | 15:08 | |
librasteve | nice! | 15:11 | |
m: "camelCaseMany".match(/ ([<lower>+]?) ([<upper> <lower>+ ])+ /)>>.tc.join(" ")~":" | 15:24 | ||
evalable6__ | WARNINGS for /tmp/_jdD_aTl6T: Useless use of "~" in expression ".join(\" \")~\":\"" in sink context (line 1) |
||
Raku eval | WARNINGS for /home/glot/main.raku: Useless use of "~" in expression ".join(\" \")~\":\"" in sink context (line 1) | ||
librasteve | m: say "camelCaseMany".match(/ ([<lower>+]?) ([<upper> <lower>+ ])+ /)>>.tc.join(" ")~":" | ||
Raku eval | Camel Case Many: | ||
evalable6__ | Camel Case Many: | ||
antononcube | I think .tc is doing the joining for you. | 15:28 | |
librasteve | .oO | ||
m: say "camelCaseMany".match(/ (<:Ll>+) (<:Lu><:Ll>+)+ /)>>.tc~":" | |||
evalable6__ | Camel Case Many: | ||
Raku eval | Camel Case Many: | ||
librasteve | looks like capture () do [] grouping anyway | 15:29 | |
antononcube | Right, of course. | ||
librasteve | m: say "camelCaseMany".match(/ (<lower>+) (<upper><lower>+)+ /)>>.tc~":" | 15:32 | |
Raku eval | Camel Case Many: | ||
evalable6__ | Camel Case Many: | ||
librasteve | just seeing if upper / lower are less line-noisy | ||
antononcube | That case-conversion of code was the easiest for me to write Raku. In Mathematica, R, or Python, I had to think of (or "research") the possible solution much longer. | 15:40 | |
librasteve | yeah - there are many areas where I think raku is =~= to other langs - I don't know Mathematica or R at all, but I guess that its a bit of a horse race in many areas and that in certain areas, eg R is a lot stronger for analytics - but raku is the child of perl and perl was already the killer regex tool even before raku made "PCRE 2.0" | 15:53 | |
16:34
dakkar left
16:38
mearp left
|
|||
tbrowder | librasteve: i have an ancient (circa 2009) website still running, mostly static (apache latest, perl, cgi) and wonder if htmx (and raku) might help me improve it if i can work on it in reasonable chunks) | 16:52 | |
17:35
sena_kun joined
|
|||
librasteve | tbrowder: I am enjoying working on Raku Cro versions of the HTMX examples ... I you would like to get a feel for it, then I suggest you go to github.com/librasteve/raku-HTMX-Examples and follow the Getting Started ... if you are feeeling intrepid why not pick one of the python HTMX examples that I haven't yet done and try you hand on that? | 18:16 | |
18:29
vrurg_ left
18:30
vrurg joined
|
|||
antononcube | Speaking of Python to Raku conversions -- I rather program in R than in Python. | 18:31 | |
But in the last 10 days, I did a fair amount Python programming (for free.) | |||
18:33
Aedil left
|
|||
Hopefully, these kind of computations and plots would be soon (readily) available in Raku: | 18:34 | ||
cdn.discordapp.com/attachments/633...c44c2& | |||
(That plot was made with a Python package I published a few days ago.) | 18:36 | ||
[Coke] | nifty: I would expect "hotter than normal" to be red. | 20:59 | |
antononcube | @Coke Agh, right! It is "just" the template used, called "plotly_dark". | 21:18 | |
tbrowder | librasteve: good idea! | 21:44 | |
lizmat: .batch is not working as i thought it would. i've gone back to: my @b = @a.aplice(0,2) and that does work. when i get time i'm gonna try submitting a problem-solving issue | 21:47 | ||
21:47
jgaz left
21:50
sena_kun left
|
|||
tbrowder | *splice | 21:52 | |
22:49
Sgeo joined
23:35
human_blip left
|