>>>>> "Mark" == Mark A Biggar <[EMAIL PROTECTED]> writes:
Mark> The usual definition of reduce in most languages that support it, is Mark> that reduce over the empty list produces the Identity value for the Mark> operation. In Smalltalk, the equivalent of "reduce" is "inject:into:", so a "sum" reduce looks like: sum := aList inject: 0 into: [:previous :this | previous + this] Now the advantage here is that if aList is empty, we get back the inject value. Thus, the behavior is always well-defined. The Perl reduce operator treats the first element of the list as the "inject" value above. However, if the first element is missing, the most Perlish thing I can think of is having it return undef, because it's like you've specified an undef inject value. I'd also argue that we could provide .inject_into, to make Smalltalkers happy to always spell out the initial value and codeblock, instead of relying on the first element of the list for the initial value. For example, if I wanted the identity hash (where all values are 1, but keys are original list elements), I could do: my %hash = @somelist.inject({}, { $^a{$^b} = 1; $^a }); That'd be Way Cool. Once you get your head around inject, you never want to go back to reduce. :) -- Randal L. Schwartz - Stonehenge Consulting Services, Inc. - +1 503 777 0095 <merlyn@stonehenge.com> <URL:http://www.stonehenge.com/merlyn/> Perl/Unix/security consulting, Technical writing, Comedy, etc. etc. See PerlTraining.Stonehenge.com for onsite and open-enrollment Perl training!