Up to Main Index Up to Journal for April, 2023
JOURNAL FOR THURSDAY 27TH APRIL, 2023
______________________________________________________________________________
SUBJECT: You want more examples!?
DATE: Thu 27 Apr 20:08:16 BST 2023
After writing last time about implementing a programming language, people are
asking me for more Mere code examples. I’m running out! I’m spending so much
time on Mere itself, and tests, I’ve not written much example code recently.
I have one new example, it’s modified to run in the current Mere ICE[1]. The
original was written as an example of the new dimension array “dim” built-in.
The code’s one main interesting feature here is the use of a common iterate
subroutine to initialize a grid, populate the grid and then display the grid
by applying different subroutines to the grid cells:
>cat timesTable.mr
/*
A mere multiplication table generator...
This program displays a multiplication table of size ROWS×COLS.
*/
ROWS=12
COLS=12
grid = [int]();
ifunc = alloc; gosub iterate
ifunc = fill; gosub iterate
ifunc = display; gosub iterate
exit
alloc:
if !exists grid y; grid[y] = []string()
grid[y] = []string grid[y] ""
return
fill:
v = y*x
if y==0; v = x
if x==0; v = y
if v==0; v = "×"
grid[y][x] = string v
return
display:
printf "%4s" grid[y][x]
if x == COLS; println
return
iterate:
y=0; yloop:
x=0; xloop:
gosub ifunc // Magic :)
if x++ <= COLS; goto xloop
if y++ <= ROWS; goto yloop
return
>mere timesTable.mr
× 1 2 3 4 5 6 7 8 9 10 11 12
1 1 2 3 4 5 6 7 8 9 10 11 12
2 2 4 6 8 10 12 14 16 18 20 22 24
3 3 6 9 12 15 18 21 24 27 30 33 36
4 4 8 12 16 20 24 28 32 36 40 44 48
5 5 10 15 20 25 30 35 40 45 50 55 60
6 6 12 18 24 30 36 42 48 54 60 66 72
7 7 14 21 28 35 42 49 56 63 70 77 84
8 8 16 24 32 40 48 56 64 72 80 88 96
9 9 18 27 36 45 54 63 72 81 90 99 108
10 10 20 30 40 50 60 70 80 90 100 110 120
11 11 22 33 44 55 66 77 88 99 110 121 132
12 12 24 36 48 60 72 84 96 108 120 132 144
>
Not very exciting, not optimized, but the code is somewhat interesting…
For the original version, available with the next update of Mere ICE, the
alloc subroutine becomes:
alloc:
if x > 0; return
grid[y] = dim []string() (x = COLS+1)
return
This shaves off 2548 instructions executed — about a 27% reduction.
--
Diddymus
[1] Mere ICE[2]: /annex/mere/ice.html
[2] I need to add a way of pushing example code from articles into Mere ICE…
Up to Main Index Up to Journal for April, 2023