Dirk --
Playground, the language we used for the Vivarium project, was essentially an OO language whose objects were spreadsheet columns. The spreadsheet "method" was a condition-action pair that would cause a value to be put into the corresponding cell. We found this to be quite powerful for many situations, and it would be nice to have an easy way to do such programming in Squeak. (Of course, it is not difficult to program in that style now, just not really pretty.) BTW, Bob Arning did do the start of Spreadsheets in Squeak, and I think he put some examples on BSS.
Also, going way back in history, one of the first and most famous systems written in Smalltalk when it came out of Xerox PARC was the Analyst, essentially a big spreadsheet system in which each cell was MVC.
Cheers,
Alan
------
At 2:11 PM +0200 10/27/01, Dirk Wessels wrote:
With all computer languages I have the problem that there is hardly any possibility for creating table structures. While C++ and pascal support things like matrix[x][y] and things like that and APL supports even more, I don't think they really solve what I would like. Even a case statement is very clumbsy in other languages, and is lacking in smalltalk.
Because smalltalk is the most flexible language, I would like to suggest that we could implement integrated spreadsheet support in Smalltalk. And use this facility to implement:
- constant tables = flexibility
- integer and floating-point calculations = speeeeed
- block tables = case statement
- data tables = database support
- matrices = matrix & math support
It would be handy to create a table in your method and just say:
MyTable atCol:1 atRow:2 put: 5.5. MyTable update. "This recalculates the contents in the table" result:= MyTable atCol: 3 atRow: 2. ^result.
I have implemented my own spreadsheet in Pascal where I defined some positions as variables. MyTable:= { { "This" "is" "a" "Table" } { 0:input 3.14:pi =input*pi:angle =sin(angle):output } { 0 0 0 0 } { "traditionally:" { 0 3.14 =A5*B5 =sin(C5) } }
MyTable at: $input put: 5.5. MyTable update. result:= MyTable at: $output.
Or similar:
mode:= inputMode. pos:= MyTable find: mode inRange: searchRange. result:= MyTable at: (pos addRow:1).
Within the table, one might even connect with other tables. Or even databases... I have added a spreadsheet support to my own commercial application and it gives quite a difference. So I thought, why not have it in squeak too??
For now, it is just an idea, but that is how things start..
Greetings, Dirk