This channel is intended for people just starting with the Raku Programming Language (raku.org). Logs are available at irclogs.raku.org/raku-beginner/live.html Set by lizmat on 8 June 2022. |
|||
00:06
swaggboi left
00:10
Manifest0 left
00:18
swaggboi joined
03:51
hexology left
03:52
hexology joined
06:08
kjp left
06:11
kjp joined
08:04
Manifest0 joined
11:20
habere-et-disper joined
|
|||
habere-et-disper | Is pi or e evil ? (See recent Numberphile) | 11:46 | |
I tried `so 666 | 668 == first * >= 666, [\+] e.comb.grep( *.Int )` but we need more digits for e, so I went with: | |||
m: so 666 | 668 == first * >= 666, [\+] ( { FatRat.new: 1, [*] 1..$++ } ... * ).head( 200 ).sum.comb.grep( *.Int ) | |||
camelia | WARNINGS for <tmp>: Useless use of "so " in expression "so 666 | 668 ==" in sink context (line 1) |
||
habere-et-disper | Any other approaches / ideas ? | ||
nemokosch | markdown ate up a good lot of characters from that code 😦 | 11:47 | |
habere-et-disper | m: so any( 666, 668 ) == first * >= 666, [\+] ( { FatRat.new: 1, [*] 1..$++ } ... * ).head( 200 ).sum.comb.grep( *.Int ) | 11:49 | |
camelia | WARNINGS for <tmp>: Useless use of "so " in expression "so any( 666, 668 ) ==" in sink context (line 1) |
||
habere-et-disper | REPL is happy. Not sure what md is eating as it seems to display okay here. | 11:50 | |
nemokosch | could you add backticks for code you post here? | 11:51 | |
habere-et-disper | With or without "m: " ? | ||
nemokosch | postimg.cc/t1j0w1p7 | ||
that part doesn't matter for me; if the bot is fine with it then preferably both | 11:52 | ||
habere-et-disper | m: `so 666 | 668 == first * >= 666, [\+] ( { FatRat.new: 1, [*] 1..$++ } ... * ).head( 200 ).sum.comb.grep( *.Int )` | ||
camelia | ===SORRY!=== Error while compiling <tmp> Bogus statement at <tmp>:1 ------> <BOL>⏏`so 666 | 668 == first * >= 666, [\+] ( expecting any of: prefix statement list term |
||
nemokosch | heh | 11:53 | |
habere-et-disper | `m: so 666 | 668 == first * >= 666, [\+] ( { FatRat.new: 1, [*] 1..$++ } ... * ).head( 200 ).sum.comb.grep( *.Int )` | ||
nemokosch | but it's readable at least 😄 | 11:54 | |
Frankly, it would be quite a puzzle to ask somebody "what does this code achieve" | 11:55 | ||
habere-et-disper | I agree. This is simpler but wrong `so 666 | 668 == first * >= 666, [\+] e.comb.grep( *.Int )` | 11:57 | |
nemokosch | why is the grep(*.Int) necessary? | 11:58 | |
habere-et-disper | To skip the decimal point ? | 11:59 | |
m: [\+] e.comb | 12:00 | ||
camelia | Potential difficulties: Useless use of [\+] in sink context at <tmp>:1 ------> <BOL>⏏[\+] e.comb Cannot convert string to number: radix point must be followed by one or more valid digits in '.⏏' (indicated by ⏏) … |
||
habere-et-disper | m: [\\+] e.comb | ||
camelia | ===SORRY!=== Error while compiling <tmp> Prefix + requires an argument, but no valid term found. Did you mean + to be an opening bracket for a declarator block? at <tmp>:1 ------> [\\+⏏] e.comb expecting any of: … |
||
nemokosch | not sure if I like the overall "comb and sanitize" approach but I'm pretty sure comb can take a regex, that's already somewhat better | ||
12:37
ab5tract_ joined
13:30
NemokoschKiwi joined
13:36
habere-et-disper left
14:09
NemokoschKiwi left
|
|||
rcmlz | I am playing around with roles. Is it possible to extend build in types? Something like this: role custom-sort { method quicksort(@a) { return @a if @a.elems < 2; my $pivot = @a.pick; my %prt{Order} is default([]) = @a.classify: * cmp $pivot; |samewith(%prt{Less}), |%prt{Same}, |samewith(%prt{More}) } } my @test = 1,2,4,6,3; @test does custom-sort; say @test.quicksort; | 17:19 | |
What should be the signature of method quicksort(@a)to make this work? I was looking into IterationBuffer but did not understand it. Any hints? | |||
nemokosch | self | 17:22 | |
17:53
NemokoschKiwi joined
17:54
NemokoschKiwi is now known as Nemokosch
17:56
Nemokosch left,
ab5tract left
|
|||
rcmlz | m: role custom-sort { method quicksort() { return self if self.elems < 2; my $pivot = self.pick; my %prt{Order} is default([]) = self.classify: * cmp $pivot; |samewith(%prt{Less}), |%prt{Same}, |samewith(%prt{More}) } } my @test = 1,2,4,6,3; @test does custom-sort; say @test.quicksort; | 18:05 | |
Raku eval | (1 2 3 4 6) | ||
rcmlz | Thank you. | ||
nemokosch | well, you did the heavy lifting by getting the most out of a semi-joke answer 😄 | 18:06 | |
rcmlz | m: role custom-sort { method quicksort() { return self if self.elems < 2; my $pivot = self.pick; my %prt{Order} is default([]) = self.classify: * cmp $pivot; |samewith(%prt{Less}), |%prt{Same}, |samewith(%prt{More}) } method quicksort-parallel(:$batch) { return self if self.elems < 2; my $pivot = self.pick; my %prt{Order} is default([]) = | 18:14 | |
self.classify( * cmp $pivot ); my $less = %prt{Less}.elems >= $batch ?? start { samewith(%prt{Less}, $batch) } !! samewith(%prt{Less}, $batch); my $more = samewith(%prt{More}, $batch); await $less andthen $less = $less.result if $less ~~ Promise; |$less, |%prt{Same}, |$more; } } my @test = 1,2,4,6,3; @test does custom-sort; say | |||
@test.quicksort-parallel(batch => 1024); | |||
Raku eval | Exit code: 1 Too many positionals passed; expected 1 argument but got 2 in method quicksort-parallel at main.raku line 8 in method quicksort-parallel at main.raku line 14 in block <unit> at main.raku line 24 | ||
rcmlz | I do not fully understand it - when putting another $self into it is also is not working. | 18:15 | |
nemokosch | it's the zeroeth argument; the one followed by a colon rather than a comma | 18:20 | |
not sure you can do it with samewith though | 18:21 | ||
%prt{Less} probably doesn't even have this method | 18:23 | ||
why do you want a method instead of a global sub? The suggestion may depend on the answer | 18:24 | ||
rcmlz | I thought it is easier for testing. But with recursion + parameter it is defenitely not. | 18:36 | |
Maybe if it is done in-place, but with my copy-approach I realize I have to attach the role inside again ... | 18:37 | ||
thank you for helping me understanding this. | 18:38 | ||
nemokosch | it's easy to fake a global function as a method, the .& syntax is nice | ||
it's much harder the other way around | |||
rcmlz | I can confirm ;-) | 18:40 | |
librasteve | rcmlz: try with a colon before the $batch param - :$batch ... that makes the pair batch => $batch | 18:44 | |
my $less = %prt{Less}.elems >= $batch 13 ?? start { samewith(%prt{Less}, :$batch) } 14 !! samewith(%prt{Less}, :$batch); 15 my $more = samewith(%prt{More}, :$batch); | |||
haviong said this, I don't think that you are using samewith right ... since this will call again the same method like this "self.quicksort-parallel(XXX, :$batch); and therefore should be used with multi method since this idea is to redispatch the method a different route with the new params... maybe I am missing something, but I do not think that the XXX magically becomes the invocant self object | 18:53 | ||
23:02
habere-et-disper joined
|
|||
habere-et-disper | Is it expected that `snip` will support chained comparisons ? | 23:05 | |
m: say snip ( * < 6, * <= 8 ), 1..10; | |||
camelia | ===SORRY!=== Error while compiling <tmp> Undeclared routine: snip used at line 1. Did you mean 'slip', 'skip'? |
||
habere-et-disper | m: use use v6.e.PREVIEW; say snip ( * < 6, * <= 8 ), 1..10; | ||
camelia | ===SORRY!=== Error while compiling <tmp> Could not find use in: /home/camelia/.raku /home/camelia/rakudo-m-inst-2/share/perl6/site /home/camelia/rakudo-m-inst-2/share/perl6/vendor /home/camelia/rakudo-m-inst-2/share/per… |
||
habere-et-disper | m: use v6.e.PREVIEW; say snip ( * < 6, * <= 8 ), 1..10; | ||
camelia | ((1 2 3 4 5) (6 7 8) (9 10)) | ||
habere-et-disper | m: use v6.e.PREVIEW; say snip ( 6 < * <= 8 ), 1..10; | 23:06 | |
camelia | ((1) (2 3 4 5 6 7 8 9 10)) | ||
nemokosch | will or will not? | 23:09 | |
normally, 6 < * <= 8 should codegen to a working function that checks what you think it should | |||
23:25
habere-et-disper left
|