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