[squeak-dev] Collection's #fold: vs #reduce:
Juan Vuletich
juan at jvuletich.org
Tue Nov 2 20:23:42 UTC 2010
Nicolas Cellier wrote:
>
> I'd say which selector are implemented in Pharo and Cuis ?
> We should better converge.
>
> Nicolas
>
Hi folks,
Cuis doesn't include any of them yet. I can add whatever people prefer.
What I'd do different is the implementation:
fold: aBinaryBlock
"Evaluate the block with the first two elements of the receiver,
then with the result of the first evaluation and the next element,
and so on. Answer the result of the final evaluation. If the receiver
is empty, raise an error. If the receiver has a single element, answer
that element."
"
#('if' 'it' 'is' 'to' 'be' 'it' 'is' 'up' 'to' 'me') fold: [:a :b |
a, ' ', b]
"
| noPreviousValue |
noPreviousValue := Object new. "something that can't be in the
receiver"
^self inject: noPreviousValue into: [ :previousValue :each |
previousValue == noPreviousValue
ifTrue: [ each ]
ifFalse: [ aBinaryBlock value: previousValue value: each ]]
This is easier to understand, and it also makes clear the relation
between #fold: (or #reduce:) and #inject:into: .
Cheers,
Juan Vuletich
More information about the Squeak-dev
mailing list
|