Here is a rather serious project (yeah, every once in a while, I need to post serious stuff) about a very specific model of computation.
It is strongly inspired from spreadsheets, as you can see:
table Scores apprenants
row Apprenants
list
Joseph
Pierre
Paul
Jacques
end
row Moyenne par matière
average
Apprenants
end
col Notes
list
Maths
Français
Histoire
end
col Moyenne par apprenant
average
Notes
end
val Apprenants \ Notes
constant
15, 18, 13
12, 08, 09
05, 15, 16
19, 12, 11
end
end
(sorry for the lack of translation)
This piece of code corresponds to a simple, classical spreadsheet table that would look like this:
+---------------------+----------+----------+----------+-------------+
| Scores apprenants | Maths | Français | Histoire | Moyenne par |
| Apprenants \ Notes | | | | apprenant |
+---------------------+----------+----------+----------+-------------+
| Joseph | 15 | 18 | 13 | 15.3 |
| Pierre | 12 | 8 | 9 | 9.7 |
| Paul | 5 | 15 | 16 | 12.0 |
| Jacques | 19 | 12 | 11 | 14.0 |
+---------------------+----------+----------+----------+-------------+
| Moyenne par matière | 12.8 | 13.3 | 12.3 |
+---------------------+----------+----------+----------+
You're probably wondering, what's the point.
The point is to make flow-based programming using tables. For example, rows and cols headers are defined as constant lists in this example, but it needs not be the case. These lists could be obtained from a filter or a map function. Same goes for values: in this example, they are constant, but they can also be obtained from other tables.
It's different from a typical spreadsheet, since cols and rows header lists are always growing and shrinking, as time steps.
Programming here is done by setting up table declarations that define how a table's headers and values are calculated using data from other tables at the previous time step.
Any calculus applicable to lists can be used to calculate the lists of rows and cols headers. Values themselves can be anything, including strings, lists, objects, ...etc, depending on the host programming language, which could be Python or Javascript for instance.
My first idea was to authorize any number of dimensions, but it turns out it's hard for the human brain to visualize more-than-3D tables, so I've decided to keep it 2D. Anyway, you can obtain the same effect with additional tables, since the rows or cols headers list of one table can be obtained from the value list from another table: then you've got 3D. If you do it again, you've got 4D and so on.
There's probably tools like that "Flowing tables" thing out there already.