Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical
 
PerlMonks  

Re^2: reduce like iterators

by LanX (Saint)
on Jan 03, 2011 at 18:53 UTC ( [id://880236]=note: print w/replies, xml ) Need Help??


in reply to Re: reduce like iterators
in thread reduce like iterators

read the example again, it's not about uniq but identifying sequences!

update:

DB<1> use List::MoreUtils "uniq"; print uniq qw(a a a a b c c a a d +e e e e) abcde

Cheers Rolf

Replies are listed 'Best First'.
Re^3: reduce like iterators
by ikegami (Patriarch) on Jan 03, 2011 at 19:06 UTC

    Oops, adjusted:

    my @b = @{ reduce { push @$a, $b if !@$a || $b ne $a->[-1]; $a } [], @ +a };

    If one were to make a list version of reduce, the callback would need access to three variables: The list (say $_), the state (say $a), the current value (say $b). The problem could be solved as follows:

    my @b = list_reduce { push @$_, $b if !@$_ || $b ne $_->[-1]; undef } +undef, @a; my @b = list_reduce { push @$_, $b if $a || $b ne $_->[-1]; 0 } 1, @a; my @b = list_reduce { push @$_, $b if defined($b) && $b ne $a; $b } un +def, @a; my @b = list_reduce { push @$_, grep defined && $_ ne $a, $b; $b } und +ef, @a;

    (@a may not start with undef for the last two to work properly.)

    Update: Added everything after the first block of code.

        I had to disambiguate reduce by adding a '+'.

        Did you?

      > > my @b = @{ reduce { push @$a, $b if @$a && $b ne $a->[-1]; $a } [], @a };

      And I said:

      > (Sure I could use $a as an array-ref for accumulation, not very elegant...)

      Cheers Rolf

        But as I've shown in the update, it's not very elegant if you don't either.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://880236]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others contemplating the Monastery: (3)
As of 2024-04-25 19:20 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found