

Eugene McDonnell 1926 — 2010 
Presented by Roger Hui at the APL2010 conference in Berlin,
20100913. The items in boxes are the slides used
in the presentation.

When I met Eugene McDonnell in 1981,
there were traces of humidity behind
my auricular orifices.
Since my pronunciation may be a bit off,
and since I don’t want you to think
that I thought of the witticism
all by myself, let me show you where
it comes from:
When I met Clark Wiedmann in 1968,
there were traces of humidity behind his auricular orifices.
— Eugene McDonnell,
Minnowbrook APL Workshop 1985,
APL QuoteQuad, 16.3, 198603.

Recreational APL
• 
Magic Squares and Permutations 
• 
Spirals and Time 
• 
How Shall I Transpose Thee? Let Me Count the Ways 
• 
The Story of ○ 
• 
How the Roll Function Works 
• 
The Caret and the Stick Functions 
• 
The Point of No Return 
• 
Sauce for the Gander (or Adding a Vector to a Matrix) 
• 
Making a Calendar 
• 
1980 Year’s Digits Problem 
• 
Puzzle of the Year 1980 (solution) 
• 
Pyramigram 
• 
Numbering Crossword Squares 
• 
Pyramigram (solution) 

I first knew of Eugene as
the “Recreational APL” editor.
In those days, on receiving an issue
of the APL QuoteQuad,
I would inevitably and eagerly first turn
to the “Recreational APL” column.
Through these columns I learned that it was
possible for technical writing
to be erudite, educational, and entertaining,
and through them I learned a lot of APL.
Jeffrey Shallit, professor of mathematics at
the University of Waterloo,
recently wrote
of his similar experience with “Recreational APL” .
Language Contributions
• 
circle x○y 
• 
signum ×y 
• 
extension of xy x⊤y
for negative x 
• 
⌈y ⌊y xy x⊤y for complex x
and y 
• 
extension of x∨y x∧y as GCD and LCM 
• 
0 = 0 ÷ 0 
• 
infinity and infinite arrays 
• 
hook and fork 

Later, I found out
that Eugene was also a key contributor
to the development of APL.
I don’t have time here to go into the details
of all the language contributions,
so I’ll just touch on two.
The Story of ○
x○y 

x 

(x)○y 
(1y*2)*0.5 

0 

(1y*2)*0.5 
sin y 

1 

arcsin y 
cos y 

2 

arccos y 
tan y 

3 

arctan y 
(1+y*2)*0.5 

4 

(¯1+y*2)*0.5 
sinh y 

5 

arcsinh y 
cosh y 

6 

arccosh y 
tanh y 

7 

arctanh y 

Anyone who has ever used the circle
function probably wondered about
the numbering of the left argument x .
The explanation usually hinges on
the fact that x○y is an odd or
even function depending on whether x
is an odd or even integer, then
goes on to explain what is an odd or even function.
But the real explanation is as follows.
In Eugene’s own words in
The Story of ○:

Actually, 1 and 3 were chosen first,
more or less by accident, for the sine and tangent,
along with 2 for the cosine function,
by listing the functions in the order
in which they were taught me in high school,
and then the observation was made
about sine and tangent being odd functions.
The hyperbolic functions simply fell into
place afterwards.
 
Extending APL to Infinity,
McDonnell and Shallit, APL80.
• infinity
• infinite arrays

The other language contribution that I want to
touch on was proposed by Eugene and Jeff Shallit
in the APL80 paper Extending APL to Infinity.
The proposal had two parts: infinity as a number,
and infinite arrays.
NARS2000 
│ 
J 

│ 

⌊/ '' 
│ 
<. / '' 
∞ 
│ 
_ 
÷0 
│ 
%0 
∞ 
│ 
_ 
2 * 3333 
│ 
2 ^ 3333 
∞ 
│ 
_ 

To date, infinity has been implemented in NARS2000
and J, denoted as a “sideways 8” (∞)
in NARS2000 and as the underscore (_) in J.
For example, the identity element of minimum is infinity
instead of a finite number; the reciprocal of 0 is
infinity instead of an error; and 2 to a large power
is infinity instead of an error.
i. 4
0 1 2 3
i. _
0 1 2 3 4 5 ...
+/ 3 ^  i. _
1.5

To date, no APL has implemented infinite arrays.
When they are implemented, you can do the following:
The index generator function on n gives the natural numbers
less than n ;
the same function on infinity gives all the natural numbers.
Having infinite arrays facilitates working
with infinite series and limits of sequences.
p: i. _
2 3 5 7 11 13 ...
R=: +/ (1 + i. _)^s
E=: */ % 1  (p: i. _)^s
R = E
1

In J, p: is a function and p: n is the nth prime,
therefore p: on the index generator on infinity are all the primes.
So the Riemann zeta function can be computed as
R=: +/ (1 + i. _)^s
and the Euler product of all the primes can be computed as
E=: */ % 1  (p: i. _)^s
That these are equal was shown by Euler
in 1737 using highschool mathematics.
The identity is one of the most beautiful things
that humanity has to offer.
(Suitable for
presentation to
the Galactic Emperor.)



At Play with J
• 41 Columns in Vector
• Written between 1993 and 2006
• Published by in 2009


Eugene remained active after he retired from
paid employment in 1990.
He wrote 41 At Play with J columns for Vector
between 1993 and 2006.
These columns have been collected
together and published as a book.
For the duration of the conference
you can order this book from
Lulu
at cost, or download the electronic version for free.
(Thank you British APL Association and Vector Books,
for this generous offer.)
eem=: 1926 10 18 ,: 2010 8 17
daynum eem
46310 76929
~/ daynum eem
30619
kei=: 1920 12 17 ,: 2004 10 19
daynum kei
44179 74801
~/ daynum kei
30622

Eugene wrote about calendar calculations in a
“Recreational APL” column.
Using a descendant of those functions,
we see that Eugene’s lifespan was 30619 days.
For Ken Iverson, it was 30622 days.
So Eugene and Ken, whose careers and lives are
so interwined, have one more connection.
I smile in my heart when I think that in heaven,
Ken now has an ally in his debates with the
Almighty on the finer points of language design.
I positively chuckle at the thought that, in the extremely
unlikely event that they are in that other, warmer, place,
0origin indexing now has another advocate against the entity
in charge.
created:  20100826 15:50 
updated:  20121221 23:30 
