How about Smalltalk-2000?
Alan Reider
reider at bellatlantic.net
Thu Feb 17 03:57:36 UTC 2000
>Well, what about these array operations:
>
>a[5] := 10 " obvious array syntax "
>a[5][9] := 0 " multiple levels of arrays "
>a[0:10] := 0 " initialize a slice "
>a[5:10] := b[10:15] " slice "
>a["key"] := Value " dictionary "
>
>Warren
As an aside, here is a simple idea for a multidimensional array which reads fairly well, just using objects and the existing ST syntax:
array := MultiArray dimensions: 5,9 .
array at: 5,9 .
array at: 5,9 put: 0.
array at: 3,10. " == array at: 4,1 "
I appropriated #, in Integer to create instances of a class called Subscript. A subscript is essentially an array of index values. Implementing #, in Subscript allows using this shorthand for more than 2 dimensions, eg 5,9,3.
This shorthand is expensive (instantiates objects) but a single subscript object could be used (eg in a loop) by sending it messages like #next or #next: dimensionToScroll.
A MultiArray is basically an Array (or has an Array) with the addition of a subscript which defines the dimensions.
All index math eg translating Subscripts into linear indexes is encapsulated in Subscript. So
MultiArray>>#at: looks like
at: aSubscript
^self contents at: (aSubscript linearIndexIn: self dimensions)
"or, (self dimensions at: aSubscript) "
Subscripts and MultiArrays could also be taught to do many other things, eg slices.
-alan reider
More information about the Squeak-dev
mailing list
|