These are some things that took me a long time to find out about J, because they were not apparent from anything I read. I write them here to possibly spare someone from having to find them out the hard way again.

Multiple dyadic ranks are not always redundant

Monadic verbs don't need more than one rank. What do I mean by this? You never have to write u"3"5 y or u"5"3 y, because you can just write u"3 y instead. In general, if u is a monadic verb and you apply two ranks to it like u"r1"r2 then you can always replace this with just a single rank like u"r. The new rank is the minimum of ranks after converting all ranks to nonnegative (for this conversion you have to know the rank of the noun you'll call the verb with).

On the other hand, if you have a dyadic verb, two ranks are not always redundant. Here's an example:

   'abc' <@:,"0 0"1 0 'de'
+--+--+--+
|ad|bd|cd|
+--+--+--+
|ae|be|ce|
+--+--+--+

There is no way to write just "r (for some r) instead of "0 0"1 0 there to get the same effect.

(Two ranks might not be enough either, you need all the ranks in $ (i.1 3 5) 9"0 0"0 1"1 1"1 2"2 2"2 3 i.2 4 6. Needing two ranks, however, actually come up very often when I write code.)

Proverbs are verbs

(I will explain this one later.)

Only the local variables since the innermost explicit call are in scope

(I will explain this one later.)

Essays/Realizations (last edited 2010-09-02 07:28:15 by BJonas)