a newbie question (disregard earlier message)

Richard A. O'Keefe ok at atlas.otago.ac.nz
Thu Jan 10 03:36:25 UTC 2002


Hari Balaraman <hbalaram2 at yahoo.fr> wrote:
	what follows is the method I wrote for the following problem:
	write an array in which each element is the square of the
	corresponding element in the receiver array.

	I cannot find out what I am doing wrong:
	
Which class did you put this in?

I shall reindent the code for clarity.

    arraySquared
      |squarearray|
      squarearray := Array new: (self size).
        "These parentheses .....^         ^ are not needed."
      1 to self size do: 
       "^^ you are missing a colon here, it should be to: "
	[:index |
	  squarearray at: index put: ((self at: index)*(self at: index))].
          "These parentheses are not ^ needed                          ^
    ^ squarearray

Most array calculations are simplified if you hide the indices.
(The APL lesson.)  This would be simpler as

    arraySquared
      ^self collect: [:x| x*x]

assuming that the method is placed in Array, and in fact Squeak already
has almost exactly this in Collection>>squared, so
    #(3 1 4 1) squared ====> #(9 1 16 1)
without you writing one line of code.

Of course in Squeak, you can just write
      ^ self * self

A somewhat more useful method would be
    "in class Collection category arithmetic"
    raisedTo: aPower
      ^self collect: [:x | x raisedTo: aPower]

Given all the other arithmetic methods, I wonder why this one was omitted.





More information about the Squeak-dev mailing list