Why does anyone uses I J for loop counter variables names

Just because it’s new 2013 year, I started to learn Forth) language. It’s cool stack-oriented language, with strict KISS principle in design. It’s a shame that it’s completely obsolete and forgotten.

So, I started with a cool book “Starting Forth” (with writing a kindlefodder recipe). A very nice book, btw. Turns out, the only serious and up-to-date open source implementation of ANS Forth gforth has a broken homebrew formula, so I had to fix it

Also, anything around Forth is pretty obsolete - for example, there is couple package managers and no comment - documentation generation system. So plan is to write one (probably it gonna be literate-programming style docco clone with Forth-specific features)

So, what about I and J as traditional loop counter variables names?

: table 
  cr 11 1 
  do 
    11 1 
    do 
      i j * 5 u.r
    loop 
    cr 
  loop ;

table

(again, it’s a shame that Pygments support Ada and Befunge, but does not support Forth)

Here we have two loops. Outer loop uses 1st and 2nd item of control stack for counter and finish value (1 and 11 initially), inner loop uses 3rd and 4th (1 and 11 initially, as well). Word I in Forth copies 1st value from control stack on top of stack, J copies 3rd value from control stack on top of stack, so they look as loop counters. That’s it! Full KISS! :)

Output:

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
 ok
blog comments powered by Disqus