http://qs1969.pair.com?node_id=908581


in reply to (almost) foldl

First, it's not equivalent since you don't handle the empty list.

my $sum = sub { (map {splice @_, 0, 2, $_[0] + ($_[1] // 0)} @_)[-1] } +->(@list);

should be

my $sum = sub { (map {splice @_, 0, 2, $_[0] + ($_[1] // 0)} @_)[-1] } +->(0, @list);

A general form of this exists as reduce in List::Util. It's is easier to use (since handling one-element lists is easier) and easier to read (since it uses $a and $b instead of $_[0] and $_[1] and uses less extraneous code).

my $sum = reduce { $a + $b } 0, @list;

Replies are listed 'Best First'.
Re^2: (almost) foldl
by dk (Chaplain) on Jun 08, 2011 at 04:54 UTC
    no extra modules! )
      Are core modules like List::Util "extra" or not?

      Your reply doesn't make sense. I pointed out that someone already wrote your code, and wrote it way better. The choice isn't between using a module and using no module, the choice is between using your code and using List::Util's.

        Well, actually, it's your reply that doesn't make sense. This section is obfuscation, i.e. pure fun, and not asking how to make the code better.

        Your statement that you pointed out that someone wrote the code is not true. Where is it? Is it your code? It's not better, because it needs an extra 0 to the list.

        Also, the topic clearly states "no extra modules". Yes, thank you, I know very well about List::Util, a great module. But you ignored that and answered I question I didn't ask, missing the point altogether.