Assuming optionality
PWC 180 Task 1 asks us to find the first unique character in a string. I wanted to have a nice interface where I would write:
say $str.comb.first: &unique-char;
The idea was to curry postcircumfix:<{ }>
so it will be bound to a BagHash
and always ask for :!exists
. Alas, .assuming
doesn’t do the right thing if the proto contains optional positions. I found a workaround utilising once
.
for ‘Perl Weekly Challenge’, ‘Long Live Perl’ -> $str {
my &unique-char = { (once $str.comb.BagHash»--){$_}:!exists }
say $str.comb.first: &unique-char;
}
I don’t want to build the BagHash
and remove single elements every time unique-char
is called. There is a slight overhead when using once
but that beats .assuming
by a mile.
Given all the special cases Signature
s provide, we may want to consider turning .assuming
into a RakuAST-macro.
Categories: Raku
Comments (0)
Trackbacks (1)
Leave a comment
Trackback
-
September 5, 2022 at 15:202022.36 Coming in at 50 – Rakudo Weekly News