(1 to: self) inject: 1 into: #*

Jarvis, Robert P. (Contingent) Jarvisb at timken.com
Wed Jan 19 20:34:14 UTC 2000


There are a few issues here:

First, IMO this change just raises the obfuscation quotient.  I think it
would make learning to use these messages harder for beginners as they'd
have to learn two forms of the message, one using a block as the second
argument and another using a symbol.  Even experienced Smalltalker's might
have to stop and puzzle this out for a minute before they recognized what
was going on.

Second, IIRC we went through an exercise a while back to get rid of message
implementations in various classes which, while they were useful, served
mostly as crutches and/or bandages for problems elsewhere in the image.
(Someone else will have to chime in with specifics here, as I was only an
observer of this process).  Slapping bits of Collection protocol
(specifically #value:value:) into Symbol seems to me to be a step backwards
in this regard.  

Third, this can produce slow-running code.  For example, if
Integer>>factorial was implemented as you suggest it would run roughly twice
as slowly as it does today.  Using your implementation below

	Time millisecondsToRun: [ 500 factorial ]

answers 5137.  The standard #factorial method takes 2634 milliseconds to
evaluate "500 factorial".  

To use the car salesman's adage, "Oh, sure, you can do that - but you
wouldn't be happy with it...".  :-)

Bob Jarvis
Compuware @ Timken

> -----Original Message-----
> From:	Mats Nygren [SMTP:nygren at sics.se]
> Sent:	Wednesday, January 19, 2000 2:05 PM
> To:	Squeak
> Subject:	(1 to: self) inject: 1 into: #*
> 
> Hello,
> 
> I find the following elegant:
> 
>   aCollection inject: 1 into: #*
> 
> (and similarly for all binary messages and single-keyword messages)
> 
> more so than the normal:
> 
>   aCollection inject: 1 into: [ :a :b | a * b]
> 
> For example like this:
> 
>   factorial
>      (1 to: self) inject: 1 into: #*
> 
> The price for this seems to be simply:
> 
> !Symbol methodsFor: 'converting' stamp: 'mn 1/19/2000 19:38'!
> value: i value: ii
>    ^i perform: self with: ii! !
> 
> And similarly for unary messages
> 
>   aCollection collect: #negated
> 
> What do you think?
> 
> /Mats Nygren





More information about the Squeak-dev mailing list