A Brief J Reference
This brief reference gives informal descriptions of most of the J primitives. Not every
primitive is included and some idioms, examples and other resources have been added
where appropriate. Since the presentation is brief and informal, it is not a replacement for
the main J references: the J Introduction and Dictionary, the J User manual and the J
Primer.
However, since the material is informally organized by topic, this reference may be useful
when considering which J features might be relevant to a given problem. Some users may
also find it helps locate gaps in knowledge that can then be filled in with the main references.
Chris Burke
Jsoftware Inc.
cburke@jsoftware.com
www.jsoftware.com
Cliff Reiter
Department of Mathematics
Lafayette College
www.lafayette.edu/~reiterc
Last updated April 2008 for J602.
2
A Brief J Reference
Contents
1
Language Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
2
Nouns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
3
Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
4
Basic Arithmetic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
5
Boolean and Relational Verbs . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
6
Name Assignment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
7
Data Information and Building . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
8
Data Copying . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
9
Data Indexing and Amendment . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
10 Boxed Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
11 Rank . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
12 Explicit Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
13 Tacit Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
14 Verb Application to Subsets . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
15 Gerunds and Controlled Application of Verbs . . . . . . . . . . . . . . . . . . .
13
16 Program Flow Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
17 Recursion
16
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18 Function Composition
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
19 More Verbs from Verbs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
20 Conversion: Literal, Numeric, Base, Binary . . . . . . . . . . . . . . . . . . . . .
19
21 Reading and Writing Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
22 Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
23 Sorting and Searching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
24 Efficiency, Error Trapping, and Debugging . . . . . . . . . . . . . . . . . . . . .
22
25 Randomization and Simulation . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
26 Constant and Identity Verbs
23
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
CONTENTS
27 Exact Computations
3
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
28 Number Theory and Combinatorics . . . . . . . . . . . . . . . . . . . . . . . . .
24
29 Circular and Numeric Verbs . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
30 Complex Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
31 Matrix Arithmetic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
32 Calculus, Roots and Polynomials . . . . . . . . . . . . . . . . . . . . . . . . . .
26
33 Special Datatypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
34 Graphics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
35 Session Manager Short-Cut Keys . . . . . . . . . . . . . . . . . . . . . . . . . .
28
36 Addons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
37 Parts of Speech and Grammar
. . . . . . . . . . . . . . . . . . . . . . . . . . .
30
38 Glossary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
39 Vocabulary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
4
A Brief J Reference
5
1
Language Basics
Examples:
fahrenheit =: 50
(fahrenheit - 32) * 5%9
10
prices=: 3 1 4 2
orders=: 2 0 2 1
orders * prices
6 0 8 2
+/ orders * prices
16
+/ \ 1 2 3 4 5
1 3 6 10 15
2 3 * / 1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
cube=: ^&3
cube i. 9
0 1 8 27 64 125 216 343 512
Names
50 fahrenheit
Nouns
+ - * %
Verbs
/ \
Adverbs
&
Conjunction
( )
Punctuation
=:
Assignment
ˆ Verbs act upon nouns (their arguments) to produce noun results
ˆ A verb may have two distinct (usually related) meanings depending on whether it is
applied to one argument (to its right), or to two arguments (left and right).
ˆ An adverb acts on a single noun or verb to its left, typically returning a verb. For
example: +/ is a verb that sums its argument.
ˆ A conjunction applies to two arguments, either nouns or verbs, typically returning a
verb. In the example above, ^&3 is the verb cube.
6
A Brief J Reference
2
Nouns
Nouns are classified in three independent ways:
ˆ numeric or literal
ˆ open or boxed
ˆ arrays of various ranks
The atoms of any array must belong to a single class: numeric, literal, or boxed. Arrays of
ranks 0, 1, and 2 are also called atom, list, and table, or, in mathematics, scalar, vector,
and matrix.
A single entity such as 2.3 or ’A’ is called an atom. The number of atoms in the shape of
a noun is called its rank. Each position of the shape is called an axis of the array, and axes
are referred to by indices 0, 1, 2, etc.
Boxed nouns are produced by the verb < (box). The result of box is an atom, and boxed
nouns are displayed in boxes. Box allows one to treat any array (such as the list of letters
that represent a word) as a single entity, or atom.
3
Constants
r
b
e
p
x
x
j
ad
ar
rationals; 5r4 is 45
base representations; 2b101 is 5
base 10 exponential notation (scientific notation); 1.2e14 is 1.2 × 1014
base π exponential notation; 3p6 is 3π 6
base e exponential notation; 3x2 is 3e2
extended precision; 2^100x is the exact integer 2100
complex numbers; 3j4 is 3 + 4i
angle in degrees; 1ad45 is approximately 0.707j0.707
angle in radians; 1ar1 is ^0j1
a.
a:
_1
_
__
_.
alphabet; list of all 256 ASCII characters
boxed empty
negative one (−1)
infinity (∞)
negative infinity (−∞)
indeterminate
7
4
Basic Arithmetic
x + y
+ y
x - y
- y
x * y
* y
x % y
% y
+: y
-: y
*: y
x %: y
%: y
x ^ y
^ y
x ^. y
^. y
x | y
| y
x <. y
<. y
x >. y
>. y
<: y
>: y
x plus y
y; identity function for real y, conjugate for complex y
x minus y
negate y
x times y
signum of y is _1, 0 or 1 depending on the sign of real y
x divide y
reciprocal of y
double y
halve y
square y
xth root of y
square root of y
x to the power y
exponential base e
base x logarithm of y
natural logarithm (base e)
residue (remainder); y mod x
absolute value of y
minimum of x and y; (smaller of, lesser of )
greatest integer less than or equal to y; called the floor
maximum of x and y; (larger of, greater of )
least integer greater than or equal to y; called the ceiling
predecessor of y; y-1 (decrement)
successor of y; y+1 (increment)
8
5
A Brief J Reference
Boolean and Relational Verbs
Result of
x < y
x <: y
x = y
x >: y
x > y
x ~: y
x -: y
-. y
x +. y
x *. y
x +: y
x *: y
x e. y
e. y
x E. y
tests are 0 if false or 1 if true.
test if x is less than y
test if x is less than or equal to y
test if x is equal to y
test if x greater than or equal to y (larger than or equal )
test if x is greater than y (larger than)
test if x is not equal to y
test if x is identically same as y (match)
not y; 1-y for numeric y.
x or y; the greatest common divisor (gcd ) of x and y
x and y; the least common multiple (lcm) of x and y
x nor y (not-or )
x nand y (not-and )
test if x is an item in y (member of )
test if the raze is in each open
mark beginnings of list x as a sublist in y (pattern occurrence)
Boolean tests are subject to a default comparison tolerance of t=:2^_44. For example, x=y
is 1 if the magnitude of the difference between x and y is less than t times the larger of
the absolute values of x and y. The comparison tolerance may be modified with the fit
conjunction, !., as in x=!.0 y, tests if x and y are the same to the last digit.
6
Name Assignment
abc=: 1 2 3
abc=. 1 2 3
'abc'=: 1 2 3
'a b c'=: 1 2 3
'a b'=: 1 2;3
cube=: ^ & 3
(exp)=: 1 2 3
names ''
erase 'a b c'
(4!:5) 1
global assignment of 1 2 3 to name abc
local assignment of 1 2 3 to name abc. The value is only
available inside the definition where it is made.
indirect assignment of 1 2 3 to name abc
parallel assignment of 1 to a, 2 to b and 3 to c.
parallel unboxed assignment of 1 2 to a and 3 to b
function assignment
result of expression exp is assigned 1 2 3
list of names defined in current locale
erases the names a, b, and c
(snap) returns names changed since last execution of
(4!:5) 1
Several foreign conjunctions of the form 4!:n deal with names. See also the Locales lab to
learn about using locales to create different locations for global names.
9
7
Data Information and Building
# y
$ y
x $ y
i. y
x
x
x
x
8
i: y
i: a j. b
F/ y
, y
,. y
,: y
, y
,. y
,: y
$. y
number of items in y (tally)
shape of array y
shape x reshape of y (cyclically using/reusing data)
list of indices filling an array of shape y (integer ); negative y reverses
axis
symmetric arithmetic sequence; for integer y, the integers from -y to y
list of numbers from -a to a in b equal steps
table of values of dyad F with arguments from x and y (outer product)
append x to y where axis 0 is lengthened (catenate)
stitch x beside y (append items) where axis 1 is lengthened;
x laminated to y giving an array with 2 items
ravel (string out) elements of y
ravel items of y
itemize, make y into a single item by adding a new length-1 leading axis
sparse matrix representation of y
Data Copying
x # y
x #^:_1 y
(G # ])y
x {. y
{. y
{: y
x }. y
}. y
}: y
|: y
(<0 1) |: y
replicate or copy items in y the number of times indicated by x; the
imaginary part of x is used to specify the size of expansion with fill
elements
expand (inverse of #) selects items of y according to 1 in Boolean x, pads
with fills where 0 in x
selects elements of y according to Boolean test G; thus, (2&< # ]) y
gives the elements of y greater than 2.
shape x take of y; negative entries cause take from end of axes; entries
larger than axis length cause padding with fill elements.
item in 1 {. y for non-empty arrays; in general 0{y (called head )
item in _1{.y or _1{y (called tail )
drop shape x part of y; negative entries cause drop from end of axes.
1 }. y (one drop) or behead
_1 }. y (negative one drop) or curtail
transpose of y
trace (diagonal) of matrix y
10
9
A Brief J Reference
Data Indexing and Amendment
I { y
x I } y
item at position I in y (index or from)
Arrays of I give corresponding arrays of items.
Boxed arrays I give positions on corresponding axes. An empty box
gives all values along that axis.
y amended at positions I by data x
[A=: i.3 4
0 1 2 3
4 5 6 7
8 9 10 11
0 2 { A
0 1 2 3
8 9 10 11
0 2 {"1 A
0 2
4 6
8 10
(<0 2;3) { A
3 11
1000 (<0 2;3) } A
0 1 2 1000
4 5 6 7
8 9 10 1000
11
10
Boxed Arrays
< y
> y
x ; y
; y
F &.> y
F &> y
a:
;: y
L. y
F L: n y
F S: n y
{:: y
x {:: y
11
box y
open (unbox) y one level
link x and y; box x and append to y; if y is unboxed, then box y first
raze y; remove one level of boxing
apply F inside of each boxed element of y
apply F to inside of each boxed element of y and adjoin the results.
boxed empty (noun called ace)
boxed list of J words in string y; (word formation)
depth or deepest level of boxing in y
apply F at level n and maintain boxing. May be used dyadically and
left and right level specified. If boxing is thought of as creating a tree
structure, then adverb L: 0 may be called leaf
apply F at level n and list the result (spread )
map has the same boxing as y and gives the paths to each leaf
fetch the data from y specified by the path x
Rank
Rank can be specified by one, two or three numbers. If the rank r contains three numbers,
the first is the monadic rank, the second the left dyadic rank and last the right dyadic rank.
If it contains two numbers, the first gives the left dyadic rank and the second gives the
monadic and right dyadic rank. All the ranks are the same when a single number is given.
F"r y
x F"(lr,rr) y
x F"0 _ y
N"r
F b. 0
12
apply F on rank r cells of the data y
apply F on rank lr cells from x and rank rr cells from y
table builder when F is a scalar function
constant function of rank r and result N
gives the monadic, left and right ranks of the verb F
Explicit Definition
Explicit definitions can be made with m : n where m is a number that specifies whether the
result is a noun, verb, adverb or conjunction. When n is 0, successive lines of input give the
defining expressions until an isolated, closing right parenthesis is reached. Noun arguments
to adverbs and conjunctions may be specified by m on the left and n on the right. Verb
arguments are u and v and the derived functions use x and y to denote their arguments.
4 : 0
3 : 0
2 : 0
1 : 0
0 : 0
input mode for a dyadic verb
input mode for general verb. This is the monadic definition, optionally
followed by an isolated colon and the dyadic definition.
input mode for conjunction
input mode for an adverb
input mode for a noun
12
A Brief J Reference
The right argument n as in m : n, may be a string, a CRLF delimited string, a matrix, or a
boxed list of strings. For example:
f=: 3 : '(*:y) + ^y'
defines f (y) = y 2 + ey
13 : n converts to tacit form of a verb (if possible). For example:
13 : 'x , 2 * x + y'
[ , 2 * +
13
Tacit Definition
In a tacit definition the arguments are not named and do not appear in the definition.
In many cases the tacit form of definition is much simpler and more obvious than the
equivalent explicit definition.
For example:
plus=: +
sum=: +/
max=: >./
mean=: +/ % #
assigns name plus to +
sum of numeric list
maximum of numeric list
average of numeric list
Compare the last definition with an equivalent explicit definition:
mean=: 3 : '(+/y) % #y'
13
14
Verb Application to Subsets
F/ y
G\ y
F/ \ y
x G\ y
G\. y
x G\. y
x G;._3 y
G;.3 y
G;._2 y
x F/. y
F/. y
15
insert verb F between items of y, also called F-reduction; thus +/2 3 4
is 2+3+4
apply G to prefixes of y; generalized scan
F scan of y
apply G to sublists of length x in y (the lists are infixes); negative x gives
non-overlapping sublists. For example x avg y gives length x moving
averages of data in y (where avg=: +/ % #).
apply G to suffixes of y (order of execution makes this fast!)
apply G to lists where sublists of length x in y are excluded (the sublists
are outfixes)
cut; apply G to shape x tessellations of y. In general, the rows of x
give the shape and offset used for the tessellation. Include shards by
specifying 3 instead of _3.
cut; generalized suffix
cut; apply G to sublists marked by ending with the last item in y.
So }:<@}:;._2 y,CRLF gives the boxed lines of CRLF delimited text y.
G;.2 y includes marked positions in sublists. G;._1 y and G;.1 y use
first item to mark beginnings of sublists. G;.0 y and dyads and gerunds
G are also defined.
function F is applied to parts of x selected by distinct items (keys) in y.
For example #/.~ y gives frequency of occurrence of items of y
apply F to oblique lists from y.
Gerunds and Controlled Application of Verbs
^:
F^:n y
F^:_ y
F^:(i.n)y
F^:G^:_ y
F`G
F/. y
F`:0 y
F@.G
F::G
iterate function (power )
iterate F n times on y; see the Dictionary for gerund n
iterate F until convergence (limit)
result of F iterated 0 to n-1 times on y
iterate F on y until G gives false
tie verbs F and G together forming a gerund
evaluate each verb in gerund F taken cyclically on data y (evoke
gerund )
alternative form of evoke gerund, returning all combinations of
functions from F on y
agenda: use G to select verb from gerund F to apply
adverse: apply F, if an error occurs, apply G instead
Many adverbs and conjunctions have gerund meanings that give generalizations; e.g. gerund
insert cyclically inserts verbs from the gerund. Thus, the following are the same:
+`% / 1 2 3 4
1 + 2 % 3 + 4
14
16
A Brief J Reference
Program Flow Control
Execution control is provided by words such as: if. else. while. etc. These control
words:
ˆ can occur anywhere in a line of code
ˆ group the code into blocks
Here, a block is zero or more sentences, which may themselves contain control words. A J
block is true if the first element of the result is not zero. In particular, an empty block is
true.
In all cases, the result of the last expression executed that was not a test, is returned as
the verb result.
if. elseif.
signum=: 3 : 0
if. y < 0 do. _1
elseif. y=0 do. 0
elseif. do. 1
end.
)
signum &> _5 7 8 0
_1 1 1 0
Compare:
* _5 7 8 0
_1 1 1 0
while. whilst.
The control word while. executes the loop while the control condition is true.
whilst. is the same as while, except the steps of the loop are executed once before the
control condition is tested.
15
sumint=: 3 : 0
k=.0
s=.0
while. k<:y do.
s=.s+k
k=.k+1
end.
s
)
sumint 10
55
for name.
Sumint=: 3 : 0
s=.0
for_k. 1+i.y
do. s=.s+k
end.
s
)
Sumint 10
55
break.
The control word break. is used to step out of a while. or whilst. or for_name. loop,
and continue. returns to the top of the loop. The control word return. can be used to
exit from function execution.
select.
The select. control word allows execution of expressions when a value matches those in a
given case or cases. An empty case matches all.
atype=: 3 : 0
select. #$y
case. 0 do. 'scalar'
case. 1 do. 'vector'
case. do. 'array of dimension greater than 1'
end.
)
16
A Brief J Reference
atype <i.3 3
scalar
atype 'abc'
vector
atype i.3 3 3
array of dimension greater than 1
try. catch.
The following line runs expression2 if running expression1 causes an error.
try. expression1 catch. expression2 end.
There are also control words for labeling lines and going to those lines: label_name. and
goto_name. .
17
Recursion
One can use self reference of verbs that are named. For example, the factorial can be
computed recursively as follows.
fac=: 3 : 'if. y <: 1 do. 1 else. y * fac y - 1 end.'
fac 3
6
Also:
fac=: 1:`(*fac@<:)@.*
fac 3
6
fac"0 i. 6
1 1 2 6 24 120
One can also create a recursive function without naming the function by using $: for selfreference. The factorial function can be defined recursively without name as follows.
(1:`(*$:@<:)@.*) 3
6
(1:`(*$:@<:)@.*)"0 i.6
1 1 2 6 24 120
17
18
Function Composition
Atop
F@G y
x F@G y
F
|
G
|
y
F
|
G
/ \
x
y
Compose
F&G y
x F&G y
F
|
G
|
y
F
/ \
G
G
|
|
x
y
Under
F&.G y
x F&.G y
-1
G
|
F
|
G
|
y
-1
G
|
F
/ \
G
G
|
|
x
y
Hook
(G H) y
x (G H) y
G
/ \
y
H
|
y
G
/ \
x
H
|
y
18
A Brief J Reference
Fork
(F G H) y
G
/ \
F
H
|
|
y
y
x (F G H) y
G
/
\
F
H
/ \
/ \
x
y x
y
The rank of F@G and F&G is the rank of G. At is denoted @: and is the same as @ except the
rank is infinite. Appose is denoted &: which is the same as & except the rank is infinite.
The ranks of the hook and fork are infinite.
Longer trains of verbs are interpreted by taking forks on the right. Thus F G H J is the
hook F (G H J) where G H J is a fork, and F G H J K is the fork F G (H J K).
Under
The verb u &. v is equivalent to the composition u & v except that the verb obverse
(inverse) to v is applied to the result for each cell. For example, multiplication is sum
under log:
3 + &. ^. 4
12
However, the rank of the result of u &. v is the monadic rank of v, which for many verbs is
zero, whereas it is often the case that you want the rank to be infinite. An alternate form
of under is &.:, which is equivalent to u &. (v"_). For example:
+/ &. ^. 3 4 5
3 4 5
+/ &.: ^. 3 4 5
60
Cap
[: F G has the effect of passing no left argument to F as part of the fork - the left branch
of the fork is capped - thus F is applied monadically.
19
19
More Verbs from Verbs
N&G
G&N
F~y
x F~ y
F : G
F :. G
G f.
F b. _1
F b. 1
20
monad derived from dyad G with N as the fixed left argument
monad derived from dyad G with N as the fixed right argument (known
as bond or curry)
reflects y to both arguments; i.e. y F y (reflex )
pass interchanges arguments; i.e. y F x (commute)
function with monad F and dyad G (monad/dyad definition)
function F with obverse (restricted inverse) G
function G with names appearing in its definition recursively replaced by
their meaning. This fix es (makes permanent) the function meaning
obverse (inverse) of F
identity function for F
Conversion: Literal, Numeric, Base, Binary
": y
a.b ": y
ajb ": y
":!. c y
". y
x ". y
".@}: ;._2 y
'm'~
#: y
x #: y
#. y
x #. y
3 !: n
8 !: n
format array y as a literal array
format data in y with field width a and b decimal digits
format data in y with field width a and b decimal digits, for
example: 15j10 ": o.i.3 4
format data showing c significant digits
execute or do string y
convert y to numeric using x for illegal numbers. J syntax
is relaxed so appearances of - in y are treated like _
execute expressions in CRLF delimited substrings appearing
in y (that ends with CRLF) and adjoin the results
value of name m is evoked
binary representation of y (antibase-two)
representation of y in base x (antibase)
value of binary rank-1 cells of y (base-two)
value of base x rank-1 cells of y (base)
various binary conversions; for example, 1 (3 !:4) y converts J floats to binary short floats while _1 (3!:4) y converts binary short floats to J floats.
format y according to format phrase x. For example, format
to width 11, decimal places 2, comma-separated, with zeros
formatted to nil, and infinities to n/a:
'b<nil>d<n/a>c11.2' (8!:2) 1.23 12345 0.123,__ 0 _1234.5,:_44 0.5 0.1
1.23 12,345.00
0.12
n/a
nil -1,234.50
-44.00
0.50
0.10
See also the Foreign Conjunction help.
20
21
A Brief J Reference
Reading and Writing Files
The following verbs are based on foreign conjunctions in the form 1!:n. These provide for
file reading/writing including indexed reads and writes and creating directories, reading
and setting attributes and permissions. Chopping file data in appropriate places can be
accomplished with ;._2 (cut). Simple substitution (e.g., _ for -) may be accomplished
with charsub from strings. See regex for more complex processing. Memory mapped
files should be considered for huge data sets.
1!:0 y
1!:1 y
x 1!:2 y
x 1!:3 y
1!:11 y
x 1!:12 y
directory information matching path and pattern in y (see
fdir)
read file y specified by a boxed name (see fread and freads)
write file y with raw, (a. or text) data x (see fwrite and
fwrites)
append file y with raw, a. or text data x (see fappend and
fappends)
indexed read. y is a pair: file name; index and length. The
index may be negative. If the length is elided, the read goes
to the end.
indexed write. y is a pair: file name; index.
For example:
'abcdefgh' 1!:2 <F=: 't1.dat'
1!:1 <F
abcdefgh
1!:11 F;2 5
cdefg
'XYZ' 1!:12 F;3
1!:11 F;2 5
cXYZg
Files may also be referenced by number; keyboard and screen input/output are supported,
and other facilities give other useful file access including indexed i/o, permissions, erasure,
locking, attributes.
Convenient utilities are defined in the files library script. For example, read in a file,
returning the result in a matrix:
load 'files'
'm' fread 'mydata.dat'
See also the Files lab.
21
22
Scripts
Scripts are plain text files containing J expressions. Typically the file extension is .ijs.
Loading the scripts runs the J expressions.
Ctrl+N
0!:0 <'filename.ijs'
0!:1 <'filename.ijs'
open a new script window
run the script filename.ijs; note boxing of filename
run the script with display
0!:0 y
0!:1 y
0!:10 y
run the J noun y as a script
run the J noun y displaying the result
run the J noun y and continue on errors
load 'filename.ijs'
similar to 0!:0 except that the script is loaded within an
explicit definitions, and hence local definitions in the script
do not exist upon completion. This allows a script to have
definitions that are local to the script.
loads a library script, for example dates is the script
system\main\dates.ijs.
similar to load except that if the script has already been
loaded, it is not loaded again.
load 'scriptname'
require 'filename'
Typically, applications are built from several scripts.
Project Manager helps you manage your J script files. In particular, it lets build you
applications from several scripts.
Scripts are maintained individually during development, and can be compiled into a single
output script for distribution/runtime/installation purposes. You can customize the build
to suit your application.
Run the Project Manager from menu Run—Project Manager... or by pressing Ctrl-B.
For more information, see the lab Building Applications.
22
23
A Brief J Reference
Sorting and Searching
/: y
x /: y
/:~ y
/:/: y
\: y
x i. y
x e. y
e. y
x E. y
I. y
x I. y
~. y
({.,#)/.~y
~: y
= y
(G # ])y
x -. y
24
grade up; indices of items of y ordered so that the corresponding items
of y would be in nondecreasing order
sort x according to indices in /:y
sorts items of y into nondecreasing order
rank order of items in y
grade down; indices of items of y ordered so that the corresponding items
of y are in nonincreasing order
indices of items of y in the reference list x
test if x is an item in y (member of )
test if the raze is in each open
mark beginnings of list x as a sublist in y (pattern occurrence)
indices of 1 in boolean list y; thus I.y<4 gives indices where y is less
than 4
indices of y in the intervals defined by x
nub of y; that is, items of y with duplicates removed (unique)
may use key to get nub and frequencies appearing in y
nubsieve: Boolean vector v so v#y is ~.y
self-classify y according to ~. y
selects items of y according to Boolean test G; thus, (2&< # ])y gives
items of y greater than 2.
items of x less those in y
Efficiency, Error Trapping, and Debugging
6!:2 y
7!:2 y
u :: v
try. e1 catch. e2 end.
time (seconds) required to execute string y. Optional left
argument specifies number of repetitions used to obtain average run time
space (bytes) required to execute string y
result of applying verb u unless that results in an error in
which case v is applied (adverse)
is similar except expressions in explicit definition mode are
executed instead of verbs being applied
The try/catch control structure may contain one or more distinct occurrences of catch.
catchd. catcht. (in any order). For example:
try. B0 catch. B1 end.
try. B0 catcht. B1 catchd. B2 end.
try. B0 catcht. B1 catch. B2 catchd. B3 end.
The B0 block is executed and:
23
catch.
catchd.
catcht.
catches errors, whatever the setting of the debug flag 13!:0
catches errors, but only if the debug flag is 0
catches a throw. expression
The foreign conjunctions 13!:n provide the underlying debugging facilitiesw, while the
Debug application provides interactive debugging, see the Debug lab.
The Performance Monitor provides detailed execution time and space used when running
an application, see the Performance Monitor lab.
25
Randomization and Simulation
? y
?. y
x ? y
? 0
9!:0 ''
9!:1 y
randomize ''
random index from i.y;
called roll ;
for example,
+/\(?100#2){_1 1 is a 100 step random _1 1 walk
default random index from i.y using 16807 as the random seed
x random indices dealt from i.y without duplication
random number in range [0,1)
query random seed
set random seed to y
randomize random seed; randomize is defined in numeric.ijs
See also system\packages\stat\random.ijs for various random number utilities, and
system\packages\stat\statdist.ijs for utilities for selecting from various distributions.
For example:
3 deal ;: 'anne henry mary susan tom'
+-----+----+---+
|susan|mary|tom|
+-----+----+---+
normalrand 5 NB. mean 0, sd 1
0.719033 _0.512529 0.801304 0.436659 _0.0496758
26
Constant and Identity Verbs
] y
x ] y
[ y
x [ y
+ y
0: y
1: y
_: y
N"r
result is y, the identity function on y
result is y (right)
result is y, the identity function on y
result is x (left)
result is y if y is a real number
result is the scalar 0
result is 1; likewise, there are constant functions _9: to 9:
result is the infinite scalar _
constant function with value N for each rank r cell
24
27
A Brief J Reference
Exact Computations
2x or 2r1
2x^100
2r3
x: y
x:^:_1 y
2 x: y
exact integer 2 (extended precision)
exact integer 2100
exact rational number 32 (extended precision)
convert y to extended precision rational
convert y to fixed precision numeric
numerator and denominator of extended precision rationals
There is special code to avoid exponentiation for extended precision arguments when using
residue, for example:
m&|@(2x&^) y
28
computes 2y mod m efficiently (without computing 2y )
Number Theory and Combinatorics
p: y
p:^:_1 y
x p: y
q: y
x q: y
x +. y
x *. y
gcd y
x | y
! y
x ! y
A. y
x A. y
C. y
x C. y
{ y
y-th prime number (in origin 0)
number of primes less than y
various number theoretic functions: next prime, totient, etc.
prime factors of y
prime factors of y with limited factor base
greatest common divisor (gcd)
least common multiple (lcm)
function gcd defined in system\packages\math\gcd.ijs
results in the gcd of the elements of y along with the coefficients whose dot product with y gives the gcd. Also useful
for finding inverses modulo m.
residue (remainder) y modulo x
factorial of y for integer y and Γ(y + 1) in general
number of combinations of x things from y things (generalized)
atomic representation (position) of permutation y
applies permutation with atomic representation x to y
(atomic permute, anagram). For example, (i.!n) A. i.n
is all permutations of order n
cycle representation of numeric permutation y as a boxed
list; visa versa when y is boxed
permutes y according to permutation x (either in numeric
or boxed cyclic representation)
Cartesian product: all selections of one item from each box
in y.
25
29
Circular and Numeric Verbs
Many trigonometric functions and other functions associated with circles are obtained using
o. with various numeric left arguments.
o. y
πy (pi times)
0 o. y
1 o. y
2 o. y
3 o. y
4 o. y
5 o. y
6 o. y
7 o. y
8 o. y
9 o. y
10 o. y
11 o. y
12 o. y
p
1 − y 2 (circle functions)
sin(y)
cos(y)
tan(y)
p
1 + y2
sinh(y)
cosh(y)
tanh(y)
p
−(1 + y 2 )
real part(y)
abs(y) which is |y
imaginary part(y)
arg(y)
m H. n y
x m H. n y
30
_1 o. y
_2 o. y
_3 o. y
_4 o. y
_5 o. y
_6 o. y
_7 o. y
_8 o. y
_9 o. y
_10 o. y
_11 o. y
_12 o. y
sin−1 (y)
cos−1 (y)
tan−1 (y)
p
y2 − 1
sinh−1 (y)
cosh−1 (y)
−1
tanh
p (y)
− −(1 + y 2 )
y
conjugate(y) √
yi where i is −1
eiy
hypergeometric function; sometimes denoted F (m; n, y)
hypergeometric function using x terms
Complex Numbers
Complex numbers are denoted with a j separating the real and imaginary parts. Thus, the
complex number commonly written 3.1 + 4i is denoted 3.1j4.
+ y
| y
* y
j. y
x j. y
+. y
*. y
r. y
x r. y
complex conjugate of y
magnitude of y
generalized signum; complex number in y direction
complex number 0jy; that is, iy (imaginary)
complex number xjy; that is, x + iy (complex )
pair containing real(y) and imaginary(y)
polar pair (r, θ) where y = reiθ , (length, angle)
is eiy (angle to complex )
is xeiy (polar to complex )
26
31
A Brief J Reference
Matrix Arithmetic
x +/ . * y
x +/ . = y
x F/ . G y
x H . G y
-/ . * y
F . G y
x %. y
%. y
|: y
x |: y
|. y
x |. y
=@i. y
128!:0 y
matrix product of x and y (dot product for vectors)
number of places where vector arguments match
inner product; F-insert applied to pairwise G’s applied row by column;
the last axis of x and first axis of y need to be compatible (same or 1)
and that axis collapses in the product.
inner product; H applied to cells of G applied rank _1 _
determinant of y
generalized determinant; +/ . * gives the permanent.
matrix divide; solution z to the linear matrix system x = y +/ . * z;
least squares solution is given when appropriate
matrix inverse or pseudo-inverse of matrix y
transpose of y
generalized transpose of y. Axes listed in x are successively moved to
the end.
reverse items in y
rotate items in y by x positions downward along the last axis
y by y identity matrix; multiply by diagonal to get a diagonal matrix
QR decomposition of y
The J Addons Lapack and FFTW give extensive linear algebra and fast Fourier transform
utilities, respectively.
32
Calculus, Roots and Polynomials
F D.
F d.
x F D:
F t.
F t:
F T.
p. y
n
n
n
n
n
n
x p. y
p.. y
x p.. y
y
y
y
y
n-th derivative of F at y
n-th derivative rank zero: compare to (F D. 1)"0 y
slope of secant of F at y and x+y
n-th Taylor series coefficient of F about 0
n-th Taylor series coefficient of F about 0 weighted by !n
n-th degree Taylor polynomial for F about 0 evaluated at y
polynomial ; toggles between coefficient representation and leadingcoefficient-with-root boxed representation of polynomials.
polynomial specified by x evaluated at points y. The coefficients x are in
ascending powers, for example 2 1 3 p. is the polynomial 3x2 + x + 2.
coefficients of derivative of polynomial y
integral of polynomial y with a constant term x
27
33
Special Datatypes
Sparse arrays provide a compact and efficient storage form for very large arrays where most
elements are zero or some other sparse element.
The verb $. converts a dense array to sparse, and $.^:_1 y ($. inverse) converts a sparse
array to dense.
A sparse array has a single sparse element, plus an array of other values and a matrix of
their corresponding indices.
The sparse attribute can be assigned to axes individually. Non-sparse axes are known as
dense axes.
J primitives work directly on sparse arrays, and operations give the same results when
applied to dense and sparse versions of the same arrays. In other words, the following
identities hold for any function f , with the exception only of those (like overtake {.) which
use the sparse element as the fill.
f -: f &. $.
f -: f &. ($.^:_1)
All primitives accept sparse or dense arrays as arguments (e.g. sparse+dense or sparse$sparse).
Symbols are a mechanism for searching, sorting, and comparisons on data that is much
more efficient than alternatives such as boxed strings. Structural, selection, and relational
verbs work on symbols.
The monad verb s: converts arrays into symbols. Several types of arguments are acceptable:
ˆ string with the leading character as the separator
ˆ literal array where each row, excluding trailing blanks, is the name of a symbol
ˆ array of boxed strings
Unicode is a 2-byte (16-bit) character datatype.
The verb u: creates unicode arrays. The monad applies as follows:
Argument
1-byte characters
2-byte characters
integers
Result
same as 2&u:
copy of argument
same as 4&u:
The inverse of the monad u: is 3&u:
The dyad u: takes a scalar integer left argument and applies to several kinds of arguments:
28
A Brief J Reference
Left
1
2
3
4
5
Right
2-byte characters
1-byte characters
2-byte characters
integers
2-byte characters
6
1-byte characters
Result
1-byte characters; high order bytes are discarded
2-byte characters; high order bytes are 0
integers
2-byte characters; integers must be from 0 to 65535
1-byte characters; high order bytes must be 0 (and are discarded)
2-byte characters; pairs of 1-byte characters are converted
to 2-byte characters
1&u: and 2&u: is an inverse pair, as are 3&u: and 4&u: .
34
Graphics
J offers a great number of facilities for doing Windows graphics. Running the Graphics,
Open GL and Plot labs is recommended. The plot.ijs script provides a powerful high
level set of useful utilities. Most users will do well to study the plot lab first. The scripts
gl2.ijs and gl3.ijs provide the graphics functions for windows driver and opengl graphics
functions.
The opengl package provides support for OpenGL graphics
The image3 addon supports reading and writing various image formats and creating and
organizing html galleries.
The fvj3 addon provides materials for Cliff Reiter’s book Fractals, Visualization and J,
3rd edition.
35
Session Manager Short-Cut Keys
Many J short-cut keys are defined and users may define their own. A few follow:
Enter
F1
Ctrl+F1
Ctrl+Shift-up-arrow
Ctrl+D
Ctrl+E
Ctrl+Shift+E
Ctrl+Shift+1
Alt+1
captures current line for editing on the execution input line
help
context sensitive help
scroll up in execution log history
window with execution history
load selection
load selection showing display
set mark 1 on current line (likewise 2-9)
go to mark 1 in current window (likewise 2-9)
See also menus Edit|Configure|Fkeys and Edit|Configure|Shortcuts. These are part
of the system configuration in menu Edit—Configure...
29
36
Addons
There are several addon packages available from the J wiki, see http://www.jsoftware.com/jwiki/JAL,
such as:
fftw
fast fourier transform package.
image3, platimg facilities for reading and writing images in a variety of formats.
lapack
standard linear algebra package.
publish
builds pdf reports from markup.
SFL
The SFL (Standard Function Library) from iMatix is a portable function
library for C/C++ programs.
sax
proXML parser based on Expat library
SQLite
provides J bindings to SQLite embedded engine
tara
reads and writes files in Excel format.
Install from menu Run|Package Manager.
30
37
A Brief J Reference
Parts of Speech and Grammar
Most words are denoted with an ASCII symbol found on standard keyboards, or such a
symbol followed by a period or colon. For example, we may think of % as denoting a J word
meaning reciprocal, and %. as an inflection of that word meaning matrix inverse.
Basic data objects in the language are nouns. These include scalars, such as 3.14, as well as
lists (vectors) such as 2 3 5 7, matrices which are a rectangular arrangement of atoms and
higher dimensional arrays of atoms. In general, arrays contain atoms that are organized
along axes. These arrays may be literal, numeric or boxed. Any array may be boxed and,
thereby, be declared to be a scalar. Nested boxing allows for rich data structures.
The number of axes of an array gives its dimension. Thus, a scalar is 0-dimensional, a
vector is 1-dimensional, a matrix is 2-dimensional and so on. The shape of an array is a list
of the lengths of its axes. Often, the shape can be imagined as being split into two portions,
giving an array of arrays. The leading portion of the split gives the frame (the shape of the
outer array) and the other portion corresponds to the shape of the arrays, giving what are
called cells. The items are the cells that occur by thinking of an n-dimensional array as a
list of (n-1)-dimensional arrays. That is, items are rank _1 cells.
Functions are known as verbs. For example, + denotes plus, %: denotes root, and (+/ % #)
denotes average. Adverbs take one argument (often a verb) and typically result in a verb.
For example, insert, denoted by / is an adverb. It takes a verb argument such as + and
results in a derived verb +/ that sums items. Notice that adverbs take arguments on the
left. The derived verb may itself take one noun argument (where it is a monad) or two
noun arguments (where it is a dyad). It is sometimes helpful to be able to view a function
as an object that can be formally manipulated. This facility is inherent in the J gerund.
Gerunds are verbs playing the role of a noun.
Conjunctions take two arguments and typically result in a verb. For example, . (dot) is a
conjunction (be careful to distinguish this from a dot that is the last character in a name).
For example, with left argument sum and right argument times, we get the matrix product
+/ . * as the derived verb.
The application of verbs to arguments proceeds from right to left. Thus 3*5+2 is 21 since
the 5+2 is evaluated first. However, it is possible to think of the expression as being read
left to right: 3 times the result of 5 plus 2. Therefore, verbs have long right scope and
short left scope. Of course, one can use parentheses to order computations however desired:
(3*5)+2 is 17.
In contrast to verbs, adverbs and conjunctions bond to their arguments before verbs do.
Also in contrast, they have long left scope and short right scope. Thus, we do not need the
parentheses in (+/) . * to denote the matrix product since the left argument of the dot
is the entire expression on its left, namely, +/ which gives the sum. Thus +/ . * denotes
the matrix product.
31
38
Glossary
Adverb
Atom
Axis
Cell
Conjunction
Dimension
Dyad
Explicit
Fork
Gerund
Hook
Inflection
Item
Monad
Noun
Rank
Tacit
Trains
Verb
A part of speech that takes an argument on the left and
typically results in a verb. For example, insert / is an adverb such that with argument plus as in +/ the result is the
derived verb sum.
A 0-dimensional element of an array; it may be numeric,
literal or boxed.
An organizational direction of an array. The shape of an
array gives the lengths of the axes of the array.
A subarray of an array that consists of all the entries from
the array with some fixed leading set of indices.
A part of speech that takes two arguments and typically
results in a verb. For example, *:^:3 is a function that
iterates squaring three times (^: is a conjunction).
The dimension of an array is the number of axes given by
the array’s shape.
A verb with two arguments.
Describes a definition which uses named arguments; for example, a verb defined using x and y..
A list of three verbs isolated in a train so that composition
of functions occurs (see Section 18)
A verb playing the role of a noun.
A list of two verbs isolated in a train so that composition of
functions occurs (see Section 18)
The use of a period or colon suffix to change the meaning of
a J word.
A cell of rank _1. Thus, an array may be thought of as a
list of its items.
A verb with one argument.
A data object that is numeric, literal or boxed.
The dimension of cells upon which a verb operates; additional leading axes are handled uniformly.
Function definition without explicit (named) reference to the
arguments
Lists of conjunctions, adverbs, verbs and nouns; for example,
a train of three verbs is a fork.
A function; when it uses two arguments, it is a dyad; and
when it uses one argument, it is a monad.
32
A Brief J Reference
39
Vocabulary
=
<
>
_
Self-classify • Equal
Box • Less Than
Open • Larger Than
Negative Sign, Infinity
=.
<.
>.
_.
Is (local)
Floor • Lesser Of
Ceiling • Larger Of
Indeterminate
=:
<:
>:
_:
Is (global)
Decrem • Less Or Equal
Increm • Larger Or Equal
Infinity
+
*
%
Conjugate • Plus
Signum • Times
Negate • Minus
Reciprocal • Divide
+.
*.
-.
%.
Real/imaginary • GCD (Or)
Length/angle • LCM (And)
Not (1-) • Less
Mat Inv • Mat Divide
+:
*:
-:
%:
Double • Not Or
Square • Not And
Halve • Match
Square Root • Root
^
$
~
|
Exponential • Power
Shape Of • Shape
Reflex • Pass, Evoke
Magnitude • Residue
^.
$.
~.
|.
Natural Log • Logarithm
Sparse
Nub
Reverse • Rotate
^:
$:
~:
|:
Power
Self Reference
Nub Sieve • Not Equal
Transpose
.
:
,
;
Det • Dot Product
Explicit (monad, dyad)
Ravel • Append
Raze • Link
..
:.
,.
;.
Even
Obverse
Ravel Items • Stitch
Cut
.:
::
,:
;:
Odd
Adverse
Itemize • Laminate
Words • Sequential Machine
#
!
/
\
Tally • Copy
Factorial • Out Of
Insert • Table, Insert
Prefix • Infix, Train
#.
!.
/.
\.
Base 2 • Base
Fit
Oblique • Key, Append
Suffix • Outfix
#:
!:
/:
\:
Antibase 2 • Antibase
Foreign
Grade Up • Sort Up
Grade Down • Sort Down
[
]
{
}
Same • Left
Same • Right
Catalogue • From
Item Amend • Amend
"
`
@
&
?
Rank • Constant
Tie (gerund)
Atop
Bond, Compose
Roll • Deal
[: Cap
{. Head • Take
}. Behead • Drop
{: Tail, {:: Map, Fetch
}: Curtail
". Do • Numbers
":
`:
@:
&:
Default Format • Format
Evoke Gerund
At
Appose
@. Agenda
&. &.: Under (Dual)
?. Roll • Deal (fixed seed)
a.
b.
D.
E.
Alphabet
Boolean, Basic
Derivative
• Member Of Interval
a:
C.
D:
f.
Ace (Boxed Empty)
Cycle Direct • Permute
Secant Slope
Fix
A.
d.
e.
H.
Anagram Index • Anagram
Derivative
Raze In • Member In
Hypergeometric
i.
j.
M.
p.
Integers • Index Of
Imaginary • Complex
Memo
Roots • Polynomial
i:
L.
NB.
p..
Axis Integers • Index Of Last
Level Verb
Comment
Poly Deriv • Poly Integral
I.
L:
o.
p:
Indices • Interval Index
Level At
Pi Times • Circle Function
Primes
q:
S:
T.
_9:
Prime Factors • Prime Exponents
Spread
Taylor Approximationu: Unicode
to 9: Constant Verbs
r. Angle • Polar
t. Taylor Coeff. (m t. u t.)
x: Extended Precision
Font styles in the Vocabulary: noun, verb, adverb, conjunction.
s: Symbol
t: Weighted Taylor