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



Reply via email to