Miroslav Silovic wrote: > [EMAIL PROTECTED] wrote: > >> And that was never quite resolved. The biggest itch was with >> operators that have no identity, and operators whose codomain is not >> the same as the domain (like <, which takes numbers but returns >> bools). >> >> Anyway, that syntax was >> >> $sum = [+] @items; >> >> And the more general form was: >> >> $sum = reduce { $^a + $^b } @items; >> >> Yes, it is called reduce, because "foldl" is a miserable name. >> >> >> > > To pick some nits, reduce and fold are different concepts. By > definition, reduce doesn't take the initial value, while fold does. > > So reduce using fold is something like > > @items || die "horribly"; > foldl &fn, @items[0], @items[1..] > > ... while fold using reduce is: > > reduce &fn, ($initial, @items) > > I think both are useful, depending on the circumstances. > > > Miro > Something like:
sub *reduce(&func, +$initial = undef, [EMAIL PROTECTED]) { $value = $initial; map { $value = &func($value, $_); } <== @list; return $value; } ? Or would this be an array method? I can see wanting to reduce list literals, in some wierd mostly-tutorial cases, but I can also see wanting this to be a data structure method to prevent reducing a parse tree using an array operation... =Austin