08:12
dakkar joined
|
|||
Anton Antonov | How can I use `reduce` , or similar operation, with initial value? Something like `reduce( $op, $init, $list)`. | 08:35 | |
08:36
lizmat_ joined,
TempIRCLogger__ left
08:37
lizmat left,
TempIRCLogger joined,
lizmat_ left,
lizmat joined
|
|||
Morfent | m:``` | 09:15 | |
use v6; | |||
sub foldl1(&f, @xs) { @xs.reduce: &f } | |||
sub foldl(&f, $init, @xs) { foldl1 &f, ($init, |@xs) } | |||
say foldl &infix:</>, 64, (8, 8); | |||
``` | |||
<@!694526400488669234> | 09:16 | ||
the `&reduce` with its `+list` parameter might be more readable in some cases | 09:17 | ||
Anton Antonov | <@!210313526928080896> Ok, using my own fold/reduce definition is good. Thanks! | 09:18 | |
<@!210313526928080896> Of course, it should have occurred to me to use slip, `($init, |@list)`... | 09:20 | ||
This statement made read the documentation more carefully around `+list`. So, this works : `reduce( &infix:<+>, 1..5, 1000)` . | 09:33 | ||
This statement made read the documentation more carefully around `+list`. So, this works : `reduce( &infix:<+>, 1..5, 1000)` , i.e. it is what I asked for. | |||
10:30
discord-raku-bot left,
discord-raku-bot joined
|
|||
Nemokosch | btw I definitely like this simple sentinel-approach for iterators more than throwing an exception as it is in Python | 12:11 | |
when iterating two things together, this is much more comfortable | |||
12:49
codesections joined
|
|||
By the way | 14:19 | ||
how do I check whether any of the given iterators reached the end? | 14:20 | ||
16:05
discord-raku-bot left
16:06
discord-raku-bot joined
16:41
dakkar left
|
|||
gfldex | <@!297037173541175296> WIth `IterationEnd`, which you should never acutally encounter. Iterators are quite internal and not part of the language spec. | 21:26 | |
21:29
discord-raku-bot left,
discord-raku-bot joined
|
|||
Nemokosch | It's important enough to be able to use iterators actually | 21:33 | |
and something that has an implementable interface shouldn't be that internal | |||
codesections | Nemokosch#9980, I agree that Iterators aren't **that** internal (and they _are_ well documented/have a stable API, unlike something that genuinely `.is-implementation-detail`). But still gfldex is right that it's pretty rare to need to do much with Iterat**ors**; even when you're implementing your own classes, you can typically implement | 22:03 | |
Iterat**able**, and let the Iterator methods use the default implementations. | |||
m: class C does Iterable { has @.inner handles <iterator> }; my $a = C.new: :inner[1,2,3]; say $a.map(* × 2) | 22:05 | ||
er, do we not have an eval-bot in #raku-beginner ? | 22:06 | ||
gfldex | codesections: the eval bot still only serves from the Discord side of the bridge. | 22:07 | |
codesections | Aha, fair enough | 22:08 | |
Nemokosch | I didn't need to _implement_ iterators but I needed to call the given interface myself | 22:20 | |
This definitely isn't a taboo in most languages I know. It's not often needed but definitely a legitimate usage. | 22:21 | ||
if you have a more comfortable way to lazily diff two (essentially) csv files that are ordered in advance, please go ahead, this is the solution I could came up with for Python back in the day and so far I have nothing better | 22:23 |