A selection from APL Quotations and Anecdotes of articles by or about John Scholes. There is another relevant one from the collection not listed here, a masterpiece, but it must remain anonymous. (It’s not that hard to figure out which one it is.)

Al Rose was one of the best stage acts I can remember. I attended a gig of his somewhere in London in the early ’70s. Al had an IBM golf-ball APL terminal. As a finale, he said, “I have The Book of Psalms here — what do you want to know?” There was a long pause, until someone in the audience asked, “Which word occurs most often?”

Al put his head down and thought for around a minute (which is a very, very long time when you’re on stage). Then he typed in a fairly long APL expression. There was a pause. Then the typewriter started clattering out a list of the unique words and their counts in order of frequency. It brought the house down.

The best thing about the experience was the look on the Fortran programmers’ faces 🙂

— John Scholes

LISP came out from people who didn’t see the progression raw binaryassemblerFORTRAN

— John Scholes, Vector

There are 10 kinds of programmers, those who understand binary and those who don’t.

— John Scholes

David Crossley: Our schedule was to have a working interpreter within twelve months, with the objective of presenting Dyalog APL to the world at the APL83 conference in Washington DC. We monitored progress and revised our estimates at monthly intervals, or sometimes on an ad hoc basis. We met our objective and presented our product at Washington in April 1983, complete with user manuals, on a number of Unix platforms kindly loaned by the manufacturers.

One rather large and heavy minicomputer arrived rather worse for wear, having been dropped by the delivery people! Our sponsors were not amused — and neither were we.

Not all the scheduled features were complete, but certainly the essential features — and a great deal more beside — were achieved.

John Scholes: Pete [Donnelly] used to organise the conference booths, I think. I spent most of the time at APL83 behind a curtain coding, because we had problems with the compactor. It’s surprising Pete still has any hair left, with the organising and borrowing of machines, making sure it all arrived and had Unix on it. It was horrific.

Dyalog at 25, 2008-09, page 17

Peter Donnelly: This was entirely my fault. I was desperate to win a benchmark and at the time the Gould was the fastest Unix box on the market. This might have been the port where the normal mechanism to detect the end of a pipe (EOF) didn’t work, so Geoff ended the message sent to or from an AP with the string reteerts ffoeg .

John Scholes: I always had it in mind to phone Dyalog support one April Fool’s Day, with a heavy mid-European accent, claiming to be Mr Reteerts Ffoeg. “I hev problem vis APs on Gould 3000; ven send my name across the interface, APL hengs …”

So the Gould took — I don’t know how long the Gould port took; it could have been months. Typically they were — Geoff may have a different view, but probably — they would be a month. People would say: Have you got it on so-and-so? And Geoff and I used to mutter in the background and suggest that we say if you want it, charge them twenty grand a port. But, as I said, every two men and a dog with a garage used to invent a Unix machine and someone would come along and say, can you port your APL to it; if you port APL to this machine we’ll buy it. We’d spend a couple of months porting to it, they’d go out of business, and we’d cross it off and carry on.

Pete has a wonderful poster — there’s a photograph somewhere — of one of our booths at one of the exhibitions. It says, Dyalog APL is now available on — machine after machine — and none of these machines exist anymore. They came and went. Near the top was a “Bleasdale”, named after the company’s founder, Eddie Bleasdale.

Amdahl Fortune Miniframe Sun
AT&T Gould NCR Tower Torch
Bleasdale HP9000 Perkin-Elmer Uniqx
Cadmus ICL Perq Pyramid VAX
Diab DS90 MASCOMP Ridge Zilog

Geoff Streeter: On the list of machines is the ICL Perq, which was rebranded “Three Rivers Perf”. It may not exist anymore, but it was the forerunner of the Apple Mac. I remember being stunned at the interface, complete with a tablet and “puck”. These days, think Wacom for that sort of tool. The Perq was strange because pointers to “words” were 4 bytes but pointers to characters were 6 bytes. That caused some fun.

The Gould port was not a long port. It was, however, a stressful one. The only serious problem was the alignment-of-doubles issue. Still, solving that paid enormous dividends later, when every RISC chip turned out to have the same constraint. Intel 686 (Ppro) and later also ran faster with doubles aligned on 64-bit boundaries.

Dyalog at 25, 2008-09, page 23-24

In the autumn of 1996, Jim Goff took me for dinner to a tiny (only six or seven tables in a small room) Thai restaurant in Philadelphia. After dinner, I entertained Jim with a description of the “Deuce” machine, a development of Alan Turing’s “ACE”.

I described how programming consisted of arranging instructions around and around the “mercury delay lines” memory, interleaved to give the last instruction time to execute before the next one passed under the read-head. I probably used my arms to show this arrangement.

If you didn’t leave enough of a gap between instructions, the processor would have to wait for the next one to do a complete lap before it could be executed. I probably gesticulated while explaining this.

The machine sported a large dial (which I probably illustrated with my hands) showing the “efficiency” of the running “programme”. 100% efficient meant that the processor was never kept waiting for the next instruction. I made a joke that it would be useful for modern computers to have an efficiency dial! I probably laughed at my own joke.

I was about to explain Deuce’s beautiful and elegant boot sequence when I detected flagging interest from my audience. (I’m sensitive to this sort of thing.) Looking up, I noticed that the woman at the next table seemed to be somewhat distressed. She said, “Do you know we’ve just been robbed? Didn’t you see the man with the gun?”

Then the tiny restaurant filled with large policemen: “Was it a big gun or a small gun?”

Apparently, the robber had gone from table to table demanding cash and jewelry. Perhaps he was perplexed by the strange, crazy man, talking gibberish while waving his arms around and giggling, and so left us alone.

Postscript. I told this yarn to a group of APL implementers at one of the Minnowbrook conferences. At the end of the story, after a thoughtful pause, someone responded: “I started programming on a three-operand addressing machine.”

— John Scholes

Years ago, I (was) volunteered to give an impromptu “what’s APL” elevator pitch to some Microsoft engineers. I stood up and started:

“Um, APL’s only data type is the array …”

“Er, APL’s primitive functions take arrays as arguments …”

Someone in the audience piped up: “That’s just as well, then.”

— John Scholes

In Scranton in 1999 during one of the sessions I was sitting next to Ken, and he leaned over and said to me—in his impish way—John, what is an array? Now I knew better than to rush into an answer to Ken. I guess I’m still working on my answers to that question.

— John Scholes, Vector, 2006-08

If an item in Ken Iverson Quotations and Anecdotes is a “Kenecdote” (per Eugene McDonnell), and an item in Eugene McDonnell Quotations and Anecdotes is a “Genecdote”, what is an item in this collection? I propose that it be called an “APLore” (pronounced “apple lore”).

I learned just today that “Mooreiana” was what Eugene had been calling the collection of Roger Moore stories since 1986 or earlier. The possibilities are endless! Tuttle-Tales, Scholisms, Krombergers, Hui-Stories, …

— Roger Hui

On 2009-06-18 John Scholes told me by e-mail of a comment by Robert Sedgewick that it is infeasible to compute the inverse of the 100-by-100 Hilbert matrix. He proved Sedgewick wrong by inverting that matrix using a dfns model of rationals, and thought that J can probably do it reasonably quickly.
On receiving John’s e-mail, I fired up my J system, defined

 H=: %@>:@(+/~)@i.

then executed

 timer '%. H 100x'

When the expression completed successfully after 115.521 seconds, I shouted across the desks to John, “John! 2 minutes!”

— Roger Hui

At the 2005 Dyalog conference in Helsingør, I gave a light-hearted talk about emulating lists in APL. Contrasting lists with trees, I said that I harbored an adolescent fantasy that, while waiting at the bus stop, I would be approached by a beautiful woman who would ask, “Excuse me, do you know the difference between a list and a tree?” I had a cute answer prepared.

Five years later, at the banquet of the APL2010 conference in Berlin, I was sitting with Flora, my wife, when two stunningly beautiful young women from APL Italiana came to our table. “Excuse me Mr. Scholes, do you know the difference between a list and a tree?”

Amazing! What are the chances of that?

(For the record, a list can be viewed as a unary tree, but let’s keep this to ourselves. There may be more beautiful women out there with a deep interest in data structures.)

— John Scholes

John Scholes was most apologetic while advising a young colleague about some care that should be taken, and quoted from the prolific poet Anon y Mous:

Teach not thy parent’s mother to extract
The embryo juices of the bird by suction.
The good old lady can that feat enact,
Quite irrespective of your kind instruction.

The sentiment seemed very similar to a Chinese phrase dating from the Ming Dynasty, 班門弄斧 , something like “exercising your axe at Paul Bunyan’s doorstep.” A search of the phrase on Google found a definition in English and one of the meanings is, “teach one’s grandmother (how) to suck eggs.”

— Roger Hui

A number of the notes in this workspace contain sections that are merely the musings of the author. They may not be entirely factual and you should check the content with say, Wikipedia, before repeating them to a discerning audience. For example:


A muse is a compound of “musons”; the elementary particles of consciousness; the atoms of our mental world. More complex patterns, such as our views on politics, religion, country music, and so forth, are constructed from clusters of these units.

An example of a muson might be the fleeting intention to buy more trash-can liners. In isolation, the muson is typically temporary and inconsequential; anything smaller does not register on EEG.

The human mind is characterized by its ability to build large and enduring structures from such particles, while other animals get by with much simpler combinations. For a dog, memory-of-rabbit is about as fancy as it gets.

Some meditation regimes may be seen as the attempt to dwell for extended periods within a single muson. The most successful exponent of this turns out to be the common oyster (Ostrea edulis), which spends its entire mental life within the sole muson of which it is capable.

Although there is no direct human equivalent of the oyster’s muson, an approximation might be something midway between an appreciation of sea water and a vague yearning for locomotion.


— John Scholes, Muse

Notice in the examples below that */5/2 is a number with 19,729 decimal digits. An amusing way to distinguish mathematicians from computer programmers at a social gathering (perhaps a cocktail party or wedding reception) is to sing this little song (to the tune of “The Grand Old Duke of York”):

Two-to-the-two-to-the-two-to-the-two-to-the-two, …

You will find that after six or seven lines, the mathematicians begin to look bored, while the computer programmers turn pale and start to faint.

— John Scholes, Natural Number Arithmetic

Stupid questions …

During the time we were implementing the very first version of Dyalog, a friend, who was not a programmer, asked me how much of it was coded in APL. I thought he was bonkers.

We now have exactly this internal “magic function” prototyping facility.

When “Visual Display Units” first appeared alongside scrolling paper terminals, a participant on a course I was giving asked me where the writing went when it disappeared off the top of the screen. I explained it was just, well, gone; same place the ticking goes when the clock stops.

We now have scrolling sessions.

On another course, someone asked me what (A B) means, when A and B are variables. I explained that it didn’t mean anything as there wasn’t a function between the A and the B .

We now have vector notation.

Sound bite: A stupid question is a portal into an alternative mindset.

— John Scholes, Declarative Programming

This is the obligatory empty array entry.

Jay Foad: JS pointed me at some papers by Trenchard More. I liked this bit:

We know from experience that empty collections differ according to type. An empty box of eggs differs from an empty box of apples: one hold no eggs; the other, no apples.

N.B. I disagree with him.

John Scholes: This spawned a whole genre of “empty-array jokes”. The one I remember is:

Diner: I’ll have the strawberries and cream please, but without the cream.
Waiter: I’m sorry sir, that dish is off the menu today, the cream wasn’t delivered.
Diner: Then, could I have it without custard, instead?

Roger Hui

John Daintree: I was expecting an empty page …

Andy Shiers: An empty page, or an empty HTML page?

An American, in a cafe with two friends, orders a cup of tea and an English Muffin. His friend from London points out: we just say 'Muffin'. Later, when he orders a cup of coffee and a Danish, his friend from Copenhagen says: we just call them ' ' .

— John Scholes

My memory of this one is even more hazy because by this time I was feeling giddy. It went something like:

Arthur doesn’t like Gmail’s fonts; (… some more steps, which I forget …) therefore, it seems reasonable to write his own operating system in k.

— John Scholes, 2012-09-07

It’s #worldmathsday and the call went out for suitable tweets. The answer is obvious:

 0 = 1 + * ○ 0j1

is the most beautiful equation in all of mathematics, relating in one short phrase the fundamental quantities 0, 1, e, π, and 0j1 and the basic operations plus, times, and exponentiation.

What is not so obvious is why and how the equation holds in Dyalog APL. With the vicissitudes of floating point representation, transcendental functions, and (non-tolerant) comparison with 0, one expects that 1+*○0j1 would give a tiny number close to 0 but not exactly 0 and the equation would be false. So in addition to everything else, 0=1+*○0j1 is a subtle show off.

    ⎕ ← a ← 3 4⍴⍳12
0 1  2  3
4 5  6  7
8 9 10 11
   * ○ 0j1 × a ÷ 2         ⍝ show off
1 0J1 ¯1 0J¯1
1 0J1 ¯1 0J¯1
1 0J1 ¯1 0J¯1
   * ○ 0j1 × 2e9 + a ÷ 2   ⍝ shameless show off
1 0J1 ¯1 0J¯1
1 0J1 ¯1 0J¯1
1 0J1 ¯1 0J¯1

[Guess who did the coding to make this happen?]

— Roger Hui


The design of APL since 1978 received significant input from a small number of people with intertwined personal relationships.

John Scholes started with Atkins Computing and Xerox APL. At Dyalog, he and colleagues developed Dyalog APL intending to follow APL2 but using NARS as the blueprint—information about APL2 did not become publicly available until after Dyalog APL version 1.0 in April 1983. Scholes later designed and implemented direct functions (dfns, §1.2) (Scholes 1996; Scholes 2018).

Guerrilla Projects

It is striking how many of the ideas important to current APL were nurtured in “guerrilla projects”, projects undertaken with the grudging approval, or tolerance, or ignorance, or outright objection, of management. These took place coeval with rapid changes in the “APL biz” and in the ecology of computing.

John Scholes invented direct functions or dfns (pronounced “dee funs”), a major distinguishing advance of current APL over previous versions (§1.2). The ideas originated when he read a special issue of The Computer Journal on functional programming (Wadler et al. 1989). He proceeded to study other publications on functional programming and became strongly motivated (“sick with desire”, like Yeats) to bring these ideas to APL (Scholes 2018). He initially operated in stealth because he was concerned the changes might be judged too radical and an unnecessary complication of the language; other observers say that he operated in stealth because the rest of Dyalog were not so enamored and thought he was wasting his time and causing trouble for people. Dfns were first presented at APL96 in San Antonio and released in Dyalog APL in early 1997 (Scholes 1996). Acceptance and recognition were slow in coming. As late as 2008, in Dyalog at 25 (Dyalog 2008), a publication celebrating the 25th anniversary of Dyalog Ltd, dfns were barely mentioned (mentioned twice as “dynamic functions” and without any elaboration).

— Hui and Kromberg, APL Since 1978, 2020

The Beyond

Talking to this bloke in The Frogs a couple of nights back. Turns out he’d had a near-death experience during an otherwise routine hernia op. After being drawn along the usual tunnel towards a White Light etc., finds himself in one of an infinity of beds equispaced down one side of a corridor stretching into the distance.

Clean, white starched sheets, heavy cotton pyjamas, bright but unobtrusive lighting, the small soothing sounds of care. Twenty-one degrees C.

Every morning they bring you a new sheet of good white paper, a sharpened pencil and a smudge-free Erasomatic ™. You spend the day writing a single beautiful function, making many refinements, until you are satisfied with it. Then, and only then, you hand in your program and the day draws to a close.

You may reference, contemplate and revise programs written on previous days.

Now and again, someone called Vera comes along with one of those sturdy NHS metal trolleys to bring me a cup of tea and a ginger biscuit.

People seldom talk; there are no phones.

— John Scholes, The Beyond

If you have any quotes or stories you would like to be featured here, please send them to

If they are too large to send through email we recommend