John M. Scholes


John Morley Scholes was a British computer scientist. His professional career was devoted to the development of the programming language APL. He was the designer and implementer of direct functions.

Personal

John Scholes was born on 24 April 1948 to Gerry and Amy Scholes. He grew up in Leamington Spa, Warwickshire, England, and attended Leamington College for Boys between 1960-1966. Between 1966-69 he attended the University of Manchester and received the B.Sc. degree in maths.
Scholes enjoyed poetic and romantic qualities in his life. Apart from APL, he also found beauty in nature, the opera, the music of Tom Waits, the literature of James Joyce, the poetry of W.B. Yeats. He was a member of the Joyce society in Dublin. In 2013, he and his wife Flora Dowling went to Sligo to the W.B. Yeats Summer School and met the poet Seamus Heaney the summer before Heaney died.
The APL side and the romantic side often met: The Depth-First Search video was recorded at dawn on the summer solstice of 2014, with birdsong in the air, while he and his wife were on a 21-day Zen retreat in France led by Thích Nhất Hạnh. Scholes was pleased with both the technical content and the circumstances of that work.

Career

Scholes's first job was as a trainee computer programmer with International Computers Limited and from there he went on to the Operations Research Department of WS Atkins in Epsom, Surrey and then to the Sales Support Department in Warrington, Lancashire. Between 1977 and 1978 he worked with the European Space Agency in Madrid, Spain as a programmer for the International Ultraviolet Explorer project. He then returned to ICL Dataskil working on APL for the VME/B operating system. In 1982, he started the Dyalog APL project for Unix machines, and in 1988 became a partner and director of the Dyalog Company. In 2004, Scholes sold his shares in the company, but continued as a consultant and, in his words, pursued his passionate interest in APL programming on various mathematical topics in general and functional programming and dfns in particular. Or "nerding", as he also called it.

Direct functions (dfns)

, the inventor of APL, was dissatisfied with the way user functions were defined. In 1974, he devised "formal function definition" or "direct definition" for use in exposition. A direct definition has two or four parts, separated by colons:

name : expression
name : expresssion0 : proposition : expression1

Within a direct definition, denotes the left argument and the right argument. In the first instance, the result of is the result of the function; in the second instance, the result of the function is that of if evaluates to 0, or if it evaluates to 1. Assignments within a direct definition are dynamically local. Examples of using direct definition are found in the 1979 Turing Award Lecture and in books and application papers.
Direct definition was too limited for use in larger systems. The ideas were further developed by multiple authors in multiple works, but the results were unwieldy. Of these, the "alternative APL function definition" of Bunda in 1987 came closest to current facilities, but is flawed in conflicts with existing symbols and in error handling which would have caused practical difficulties, and was never implemented. The main distillates from the different proposals were that the function being defined is anonymous, with subsequent naming being effected by assignment; the function is denoted by a symbol and thereby enables anonymous recursion.
In 1996, Scholes invented direct functions or dfns, a major distinguishing advance of early 21st century APL over prior versions. Dfns are a unique combination of array programming, higher-order functions, and functional programming. The ideas originated in 1989 when he read a special issue of The Computer Journal on functional programming. He then proceeded to study functional programming and became strongly motivated to bring these ideas to APL. 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 Dyalog colleagues were not so enamored and thought he was wasting his time and causing trouble for people. Dfns were first presented in the Dyalog Vendor Forum at the APL '96 Conference and released in Dyalog APL in early 1997. Acceptance and recognition were slow in coming. As late as 2008, in Dyalog at 25, a publication celebrating the 25th anniversary of Dyalog Ltd, dfns were barely mentioned. As of 2019, dfns are implemented in Dyalog APL, NARS2000, and ngn/apl. They also play a key role in efforts to exploit the computational capabilities of a GPU.
Dfns are illustrated here with an example. Much more extensive explanation and examples are found in the direct functions article and in the references.
Quicksort on an array works by choosing a "pivot" at random among its major cells, then catenating the sorted major cells which strictly precede the pivot, the major cells equal to the pivot, and the sorted major cells which strictly follow the pivot, as determined by a comparison function. Defined as a dop :

Q←
⍝ precedes ⍝ follows ⍝ equals
2 8 8 2 8 8
¯1 1 0
x← 2 19 3 8 3 6 9 4 19 7 0 10 15 14
Q x
0 2 3 3 4 6 7 8 9 10 14 15 19 19

is a variant that catenates the three parts enclosed by the function instead of the parts per se. The three parts generated at each recursive step are apparent in the structure of the final result. Applying the function derived from to the same argument multiple times gives different results because the pivots are chosen at random. In-order traversal of the results does yield the same sorted array.

Q3←
Q3 x
┌────────────────────────────────────────────┬─────┬┐
│┌──────────────┬─┬─────────────────────────┐│19 19││
││┌──────┬───┬─┐│6│┌──────┬─┬──────────────┐││ ││
│││┌┬─┬─┐│3 3│4││ ││┌┬─┬─┐│9│┌┬──┬────────┐│││ ││
│││││0│2││ │ ││ ││││7│8││ │││10│┌──┬──┬┐││││ ││
│││└┴─┴─┘│ │ ││ ││└┴─┴─┘│ │││ ││14│15││││││ ││
││└──────┴───┴─┘│ ││ │ │││ │└──┴──┴┘││││ ││
││ │ ││ │ │└┴──┴────────┘│││ ││
││ │ │└──────┴─┴──────────────┘││ ││
│└──────────────┴─┴─────────────────────────┘│ ││
└────────────────────────────────────────────┴─────┴┘
Q3 x
┌───────────────────────────┬─┬─────────────────────────────┐
│┌┬─┬──────────────────────┐│7│┌────────────────────┬─────┬┐│
│││0│┌┬─┬─────────────────┐││ ││┌──────┬──┬────────┐│19 19│││
│││ │││2│┌────────────┬─┬┐│││ │││┌┬─┬─┐│10│┌──┬──┬┐││ │││
│││ │││ ││┌───────┬─┬┐│6│││││ │││││8│9││ ││14│15││││ │││
│││ │││ │││┌┬───┬┐│4│││ │││││ │││└┴─┴─┘│ │└──┴──┴┘││ │││
│││ │││ │││││3 3│││ │││ │││││ ││└──────┴──┴────────┘│ │││
│││ │││ │││└┴───┴┘│ │││ │││││ │└────────────────────┴─────┴┘│
│││ │││ ││└───────┴─┴┘│ │││││ │ │
│││ │││ │└────────────┴─┴┘│││ │ │
│││ │└┴─┴─────────────────┘││ │ │
│└┴─┴──────────────────────┘│ │ │
└───────────────────────────┴─┴─────────────────────────────┘

The above formulation is not new; see for example Figure 3.7 of the classic The Design and Analysis of Computer Algorithms. However, unlike the pidgin ALGOL program in Figure 3.7, and are executable, and the partial order used in the sorting is an operand, the the examples above.

Articles and presentations

Scholes is well-known among colleagues for his wit, sense of humor, and comic timing. His "after dinner" presentations at Dyalog conferences were highly-anticipated events. A selection of them from the list above:
Other examples can be found in Scholisms.