of boxes (it can be assembled with other boxes, and/or more copies can be made of the box). <1 0 0 1 0 +---------+ |1 0 0 1 0| +---------+ The only collection type offered by J is the arbitrarily dimensioned array. Most algorithms can be expressed very concisely using operations on these arrays. J's arrays are homogeneously typed, for example the list 1 2 3 is a list of integers despite 1 being a bit. For the most part, these sorts of type issues are transparent to programmers. Only certain specialized operations reveal differences in type. For example, the list 1.0 0.0 1.0 0.0 would be treated exactly the same, by most operations, as the list 1 0 1 0 . J also supports sparse numeric arrays where non-zero values are stored with their indices. This is an efficient mechanism where relatively few values are non-zero. J also supports objects and classes, but these are an artifact of the way things are named, and are not data types. Instead, boxed literals are used to refer to objects (and classes). J data has value semantics, but objects and classes need reference semantics. Another pseudo-type—associated with name, rather than value—is the memory mapped file. Debugging J has the usual facilities for stopping on error or at specified places within verbs. It also has a unique visual debugger, called Dissect, that gives a 2-D interactive display of the execution of a single J sentence. Because a single sentence of J performs as much computation as an entire subroutine in lower-level languages, the visual display is quite helpful. Documentation J's documentation includes a dictionary, with words in J identified as nouns, verbs, modifiers, and so on. Primary words are listed in the vocabulary, in which their respective parts of speech are indicated using markup. Note that verbs have two forms: monadic (arguments only on the right) and dyadic (arguments on the left and on the right). For example, in '-1' the hyphen is a monadic verb, and in '3-2' the hyphen is a dyadic verb. The monadic definition is mostly independent of the dyadic definition, regardless of whether the verb is a primitive verb or a derived verb. Control structures J provides control structures (details here) similar to other procedural languages. Prominent control words in each category include: assert. break. continue. for. goto_label. if. else. elseif. return. select. case. throw. try. catch. while.