Up to Main Index                            Up to Journal for August, 2023

                    JOURNAL FOR THURSDAY 3RD AUGUST, 2023
______________________________________________________________________________

SUBJECT: Going a little loopy…
   DATE: Thu  3 Aug 21:12:54 BST 2023

For the last several days I’ve been writing tests, examples and documentation
on user functions for Mere ICE, nearly done, but I’m bored and need a break.

So what does any deranged coder implementing their own programming language
do? They experiment and go implement for-next loops of course! What else? :)


    >cat loopy.mr
    for x = 1; x <= 3; x++
      println x
    next

    >mere loopy.mr
    1
    2
    3
    >


The format is fairly standard. ‘for’ followed by initialisation, a condition
and a post condition statement. A loop terminates at ‘next’. Everything after
the ‘for’, apart from the semi-colons is optional. For example:


    >cat optional.mr
    x = 1
    for ;; // infinite loop
      println x
      if x++ > 3; break
    next

    >mere optional.mr
    1
    2
    3
    >


Is that a ‘break’ in there? Yes it is! There is a matching ‘continue’ too:


    >cat even.mr
    for x = 1; x <= 10; x++
      if x % 2 == 1; continue
      println x
    next

    >mere even.mr
    2
    4
    6
    8
    >


"but what about…", nested loops? Got you covered there as well:

    >cat table.mr
    for x = 1; x <= 10; x++
      for y = 1; y <= 10; y++
        printf "%4d" x*y
      next
      println
    next

    >mere table.mr
       1   2   3   4   5   6   7   8   9  10
       2   4   6   8  10  12  14  16  18  20
       3   6   9  12  15  18  21  24  27  30
       4   8  12  16  20  24  28  32  36  40
       5  10  15  20  25  30  35  40  45  50
       6  12  18  24  30  36  42  48  54  60
       7  14  21  28  35  42  49  56  63  70
       8  16  24  32  40  48  56  64  72  80
       9  18  27  36  45  54  63  72  81  90
      10  20  30  40  50  60  70  80  90 100
    >


Although ‘break’ and ‘continue’ only work for the current for-next loop… for
the moment :| Iterating arrays and maps? Hrm… okay…


    > cat arrayMap.mr
    a = []int 3 5 7
    for x = 0; x < len a; x++
      println x ": " a[x]
    next

    println

    m = [string] "a" "ant", "b" "bat", "c" "cat"
    for k = keys m; len k > 0; k = delete k 0
      println k[0] ": " m[k[0]]
    next

    >mere arrayMap.mr
    0: 3
    1: 5
    2: 7

    a: ant
    b: bat
    c: cat
    >


Tada! Okay, not quite so pretty :( I don’t have any automatic iteration like
Go’s range yet. Give me a little slack, this is only a few hours coding… ;)

Now I suppose I’d better get back to the boring stuff :(

If you are very lucky I may, possibly, slip this into the next release — as a
highly experimental feature sans tests and documentation…

--
Diddymus


  Up to Main Index                            Up to Journal for August, 2023