|
|
(35 intermediate revisions by 7 users not shown) |
Line 1: |
Line 1: |
| {{Use dmy dates|date=September 2019}}
| | [[File:01 gen 010-2014 staff photo.jpg|thumb|right|John Scholes]] |
| {{Infobox scientist
| | {| class=wikitable style="float:right" |
| | name = John Morley Scholes | | |{{quote | "Humour is but the exercise of abstraction."|John Scholes. [http://dfns.dyalog.com/n_humour.htm ''Humour''], dfns workspace.}} |
| | birth_date = {{birth date|df=yes|1948|4|24}}
| | |} |
| | birth_place =
| | '''John Morley Scholes''' (1948–2019) was a British computer scientist. His professional career was devoted to the development of APL. He was the first lead developer at what eventually became [[Dyalog Ltd.]] and kept working for the company until his death, since when he has dedicated himself to the art of writing perfect programs.<ref>[http://dfns.dyalog.com/n_beyond.htm ''The Beyond''], dfns workspace.</ref> He was the designer and implementer of [[Dyalog APL]]'s direct functions ([[dfn]]s, pronounced "dee funs"), a major distinguishing advance which was since copied by all new APLs; [[NARS2000]], [[GNU APL]], [[ngn/apl]], [[dzaima/APL]], etc. He also advocated for simplicity in computer systems. |
| | death_date = {{death date and age|df=yes|2019|2|18|1948|4|24}} | |
| | death_place = | |
| | citizenship = [[British people|British]]
| |
| | alma_mater = [[University of Manchester]]
| |
| | known_for = [[APL (programming language)|APL]], [[Direct functions]]
| |
| | prizes = [[Iverson Award]]<ref>{{cite web|url=http://sigapl.org/award.php|title=Kenneth E. Iverson Award|publisher=[[Association for Computing Machinery]]|access-date=15 September 2019}}</ref>
| |
| | influences = [[Kenneth E. Iverson]], [[Philip Wadler]]
| |
| | work_institution = [[International_Computers_Limited|ICL]]<br/> [[Atkins (company)|W.S. Atkins Ltd.]]<br/> [[European Space Agency]]<br/> [[APL (programming language)#Dyalog_APL|Dyalog Ltd.]]
| |
| }}
| |
|
| |
|
| '''John Morley Scholes''' (1948–2019) was a [[British people|British]] [[computer scientist]]. His professional career was devoted to the development of the [[programming language]] [[APL (programming language)|APL]]. He was the designer and implementer of [[direct functions]].
| | In 1995 he and [[Pete Donnelly]] received the [[Iverson Award]] for their role in creating and promoting Dyalog APL. |
|
| |
|
| == Personal ==
| | In 2009, Scholes produced an explanatory video of [[John Scholes' Conway's Game of Life|his implementation of John Conway's "Game of Life"]]. It has since gathered over 200 000 views. He has also produced numerous, always well-received, presentation and papers on various subjects from the technical to the [[humor]]ous. |
|
| |
|
| John Scholes was born on 24 April 1948 to Gerry and Amy Scholes. He grew up in [[Leamington Spa]], [[Warwickshire]], England, and attended [[North Leamington School|Leamington College for Boys]] between 1960-1966. Between 1966-69 he attended the [[University of Manchester]] and received the B.Sc. (Hons) degree in Maths.<ref name=obit>{{citation|author=____|title=A Service to Celebrate the Life of John Morley Scholes|date=4 March 2019}}</ref>
| | == Publications == |
|
| |
|
| 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.<ref name=obit/>
| | * [https://doi.org/10.1145/75144.75159 "YSM: a full-screen manager for Dyalog APL"] at [[APL89]]. With S. D. Curtin. |
| | * [http://dfns.dyalog.com/downloads/howcomp.pdf Article: ''How to Write Computer Programs''] |
|
| |
|
| The APL side and the romantic side often met: The Depth-First Search video<ref name=DFS/> (below) 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.<ref name=obit/>
| | === Dyalog user meetings === |
| | {{Main|Dyalog user meeting}} |
| | <div style="column-width:30em"> |
| | * [[Dyalog '06]] 04: Language Extensions |
| | * Dyalog '06 07: Functions as Results ([https://www.dyalog.com/uploads/conference/dyalog06/presentations/07_Scholes_FuncsAsResults materials]) |
| | * [[Dyalog '07]] 09: Version 12.0 Performance Enhancements (with [[Nic Delcros]]) |
| | * Dyalog '07 10: An Investigation into Higher Level Operators |
| | * [[Dyalog '08]] 06: Interpreter Performance (with [[Nic Delcros]]) |
| | * Dyalog '08 08: [https://dyalog.tv/Dyalog08/?v=TwvgyNOtoK8 Journaled Files] ([https://www.dyalog.com/uploads/conference/dyalog08/presentations/08_SmithScholes_JournaledFiles.ppt materials]) (with [[Richard Smith]]) |
| | * Dyalog '08 [https://dyalog.tv/Dyalog08/?v=vUS0t-z1-iA A Plea for Simplicity] |
| | * [[Dyalog '09]] 19: [https://dyalog.tv/Dyalog09/?v=8ic0ctto1HU Complex Numbers] |
| | * Dyalog '09 C03: Introduction to D-Functions (dfns) ([https://dyalog.tv/Dyalog09/?v=OZARVrGQQho VIDEO 1 (124 mins)], [https://dyalog.tv/Dyalog09/?v=RQNSe9s_3eE VIDEO 2 (67 mins)]) |
| | * [[Dyalog '10]] P01: APL# – An APL for Microsoft .NET, Mono, Silverlight and Moonlight ([https://www.dyalog.com/uploads/conference/dyalog10/presentations/P01_KrombergScholesManktelow_APLSharp.pdf materials]) (with [[Morten Kromberg]] and Jonathan Manktelow) |
| | * Dyalog '10 P02: [https://dyalog.tv/APL2010/?v=Tq144y6DrME Unifying Traditional Functions and Dfns in APL#] ([https://www.dyalog.com/uploads/conference/dyalog10/presentations/P02_KrombergScholesManktelow_UnifyingFns.pdf materials]) (with [[Morten Kromberg]] and Jonathan Manktelow) |
| | * Dyalog '10 WS2: Introduction to Dfns ([https://dyalog.tv/APL2010/?v=-xsP154fE0o VIDEO 1 (67 mins)], [https://dyalog.tv/APL2010/?v=DkLxe9z1BKs VIDEO 2 (34 mins)]) |
| | * [[Dyalog '11]] D04: Introducing the Dyalog '11 Conference Edition (with [[Roger Hui]]) |
| | * Dyalog '11 D06: Function Trains for Dyalog APL |
| | * Dyalog '11 D07: Closures |
| | * Dyalog '11 D08: [https://dyalog.tv/Dyalog11/?v=mZ_qkXb_tV8 APL#] ([https://www.dyalog.com/uploads/conference/dyalog11/presentations/D08_apl_sharp materials]) (with [[Morten Kromberg]] and Jonathan Manktelow) |
| | * Dyalog '11 D18: [https://dyalog.tv/Dyalog11/?v=bQlH49krwbk What is Functional Programming?] (with [[Roger Hui]]) |
| | * [[Dyalog '12]] D04: [https://dyalog.tv/Dyalog12/?v=KrrHYjPXc84 Potential Version 14.0 Language Features] ([https://www.dyalog.com/uploads/conference/dyalog12/presentations/D04_14.0 materials]) (with [[Roger Hui]]) |
| | * Dyalog '12 D06: [https://dyalog.tv/Dyalog12/?v=L5rYVxPXV70 State-free Programming] |
| | * [[Dyalog '13]] D09: [https://dyalog.tv/Dyalog13/?v=7-93GzDqC08 Train Spotting in Version 14.0] ([https://www.dyalog.com/uploads/conference/dyalog13/presentations/D09_Train_Spotting_in_Version_14.pdf slides]) |
| | * Dyalog '13 D13: [https://dyalog.tv/Dyalog13/?v=3qGsCrkWT-4 Social Skills for Programmers] |
| | * [[Dyalog '14]] D09: [https://dyalog.tv/Dyalog14/?v=pVrNT2lGUUo Distractions] ([https://www.dyalog.com/uploads/conference/dyalog14/presentations/D09_Distractions.pptx slides]) |
| | * [[Dyalog '15]] D16: [https://dyalog.tv/Dyalog15/?v=9KOto3xXS3c Future Operator Proposals: Cut, Under, Merge] ([https://www.dyalog.com/uploads/conference/dyalog15/presentations/D16_Future_Operator_Proposals.zip materials]) (with [[Roger Hui]]) |
| | * [[Dyalog '16]] D06: [https://dyalog.tv/Dyalog16/?v=vms4_Fpqmv8 New Primitive Functions and Operators] ([https://www.dyalog.com/uploads/conference/dyalog16/presentations/D06_New_Primitives_RH.zip materials], [https://www.dyalog.com/uploads/conference/dyalog16/presentations/D06_New_Primitives_JS.txt demo script]) (with [[Roger Hui]]) |
| | * Dyalog '16 L04: [https://dyalog.tv/Dyalog16/?v=WsmS4XBFvH0 Dyalog Implementation – The Early Years] (with Stephen Taylor and [[Geoff Streeter]]) |
| | * [[Dyalog '17]] D04: [https://dyalog.tv/Dyalog17/?v=74xrZkVlns0 A Case Study – Recoding from Procedural to Denotative Style] ([https://www.dyalog.com/uploads/conference/dyalog17/presentations/D04_Recoding_from_Procedural_to_Denotative_Style.pdf slides]) |
| | * Dyalog '17 D15: TAO – Total Array Ordering ([https://www.dyalog.com/uploads/conference/dyalog17/presentations/D15_TAO_of_Dyalog.zip materials]) (with [[Roger Hui]]) |
| | * Dyalog '17 D17: Prefix Agreement: A Proposal for an Extension to the <syntaxhighlight lang=apl inline>@</syntaxhighlight> Operator ([https://www.dyalog.com/uploads/conference/dyalog17/presentations/D17_Extension_to_the_At_Operator.pdf slides]) |
| | * [[Dyalog '18]] D10: [https://dyalog.tv/Dyalog18/?v=y33XDD6ANt0 Dfns – Past, Present and Future] ([https://www.dyalog.com/uploads/conference/dyalog18/presentations/D10_Dfns_Past_Present_Future.pdf slides]) |
| | </div> |
|
| |
|
| == Career == | | === Other talks === |
| | * [[Dyalog webinar]]: [https://dyalog.tv/Webinar/?v=OeOpdGF1bnc A closer look at the new primitives in version 16.0] (with [[Morten Kromberg]]) |
|
| |
|
| Scholes's first job was as a trainee computer programmer with [[International Computers Limited|ICL]] (1969-70) and from there he went on to the Operations Research Department of [[Atkins (company)|WS Atkins]] in [[Epsom]], [[Surrey]] (1971-75) and then to the Sales Support Department in [[Warrington]], [[Lancashire]] (1976-77). 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 [[International Computers Limited#Dataskil|ICL Dataskil]] working on APL for the VME/B Operating system (1978-82). 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]] in particular. Or "nerding", as he also called it.<ref name=obit/>
| | == External links == |
| | <div style="column-width:30em"> |
|
| |
|
| === Direct functions (dfns) === | | === Websites === |
|
| |
|
| [[Kenneth E. Iverson]], 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.<ref name=directdef>{{citation|last=Iverson|first=Kenneth E.|title=Elementary Functions|chapter=Chapter 10, Formal Function Definition|date=1974|publisher=IBM Corporation|url=http://www.jsoftware.com/papers/DirectDef.htm|accessdate=18 September 2019}}</ref> A direct definition has two or four parts, separated by colons: | | * [[wikipedia: John_M._Scholes_(computer_scientist)|Wikipedia: John Scholes]] |
| <pre>
| | * [[Wikipedia: Direct functions]] |
| name : expr
| | * [http://johnscholes.rip/ Memorial website] |
| name : expr0 : prop : expr1
| |
| </pre>
| |
| Within a direct definition, ⍺ denotes the left argument and ⍵ the right argument. In the first instance, the result of expr is the result of the function; in the second instance, the result of the function is that of expr0 if prop evaluates to 0, or expr1 if it evaluates to 1. Assignments within a direct definition are dynamically local (accessible within called functions). Further examples of direct definition are found in the 1979 [[Turing Award]] Lecture<ref name=TOT>{{cite journal|last=Iverson|first=Kenneth E.|title=Notation as a Tool of Thought|journal=Communications of the ACM|volume=23|number=8|date=August 1980|url=https://www.jsoftware.com/papers/tot.htm|access-date=8 April 2016|doi=10.1145/358896.358899|pages=444–465}}</ref> and in an application paper in 1987.<ref name=Hui1987>{{cite journal|last=Hui|first=Roger|author-link=Roger Hui|title=Some Uses of { and }|journal=APL 87 Conference Proceedings|date=May 1987|url=https://www.jsoftware.com/papers/from.htm|access-date=15 April 2016}}</ref><ref name=APL1978/>
| |
|
| |
|
| Direct definition was too limited for use in larger systems. The ideas were further developed by multiple authors in multiple works<ref name=opfns>{{citation|last=Iverson|first=Kenneth E.|title=Operators and Functions, §8|journal=Research Report Number #RC7091|date=26 April 1978|publisher=IBM Corporation|url=http://www.jsoftware.com/papers/opfns.htm|accessdate=2019-09-19}}</ref><ref name=IversonWooster1981>{{citation journal|last1=Iverson|first1=Kenneth E.|last2=Wooster|first2=Peter|title=A Function Definition Operator|journal=APL81 Conference Proceedings, APL Quote Quad|volume=12|number=1|date=September 1981}}</ref><ref name=Cheney>{{citation|last=Cheney|first=Carl M.|title=APL*Plus Nested Array System Reference Manual, §4.17|date=March 1981|publisher=STSC, Inc.|url=http://www.sudleyplace.com/APL/Nested%20Arrays%20System.pdf|accessdate=18 September 2019}}</ref><ref name=ratapl>{{citation|last=Iverson|first=Kenneth E.|title=Rationalized APL|date=6 January 1983|publisher=I.P. Sharp Associates|url=http://www.jsoftware.com/papers/RationalizedAPL.htm|accessdate=2019-09-19}}</ref><ref name=dictionary>{{citation journal|last=Iverson|first=Kenneth E.|title=A Dictionary of APL|journal=APL Quote Quad|volume=18|number=1|date=September 1987|url=http://www.jsoftware.com/papers/APLDictionary.htm|accessdate=19 September 2019}}</ref><ref name=Bunda1987>{{citation journal|last=Bunda|first=John|title=APL Function Definition Notation|journal=APL87 Conference Proceedings, APL Quote Quad|volume=17|number=4|date=May 1987}}</ref><ref name=J>{{citation journal|last1=Hui|first1=Roger|display-authors=etal|title=APL\?|journal=APL90 Conference Proceedings, APL Quote Quad|volume=20|number=4|date=July 1990|url=http://www.jsoftware.com/papers/J1990.htm|accessdate=2019-09-10}}</ref> but the results were unwieldy. Of these, the "alternative APL function definition" of Bunda in 1987<ref name=Bunda1987/> 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 (a) the function being defined is anonymous, with subsequent naming (if required) being effected by assignment; (b) the function is denoted by a symbol and thereby enables anonymous recursion.<ref name=APL1978/>
| | === Selected videos === |
|
| |
|
| In 1996, Scholes invented [[direct functions]] or dfns (pronounced "dee funs"), a major distinguishing advance of current APL over previous versions.<ref name=Scholes1996>{{citation journal|last=Scholes|first=John|title=Direct Functions in Dyalog APL|journal=Vector|volume=13|number=2|date=October 1996|url=http://www.dyalog.com/uploads/documents/Papers/dfns.pdf|access-date=16 September 2019}}</ref><ref name=dfnsWS>{{citation|last=Scholes|first=John|title=Direct Functions Workspace|date=1998-2019|url=http://dfns.dyalog.com|access-date=15 September 2019}}</ref><ref name=Scholes2018v>{{citation|last=Scholes|first=John|title=Dfns—Past, Present and Future (video)|publisher=Dyalog '18 User Meeting|date=31 October 2018|url=http://www.youtube.com/watch?v=y33XDD6ANt0|accessdate=21 September 2019}}</ref><ref name=Scholes2018t>{{citation|last=Scholes|first=John|title=Dfns—Past, Present and Future (text)|publisher=Dyalog '18 User Meeting|date=31 October 2018|url=http://www.dyalog.com/uploads/conference/dyalog18/presentations/D10_Dfns_Past_Present_Future.pdf|accessdate=21 September 2019}}</ref> Dfns are a unique combination of [[array programming]], [[higher-order function]]s, and [[functional programming]]. The ideas originated in 1989 when he read a special issue of ''The Computer Journal'' on functional programming.<ref name=Wadler>{{citation journal|last1=Wadler|first1=Philip L.|display-authors=etal|title=Special Issue on Functional Programming|journal=The Computer Journal|volume=32|number=2|date=1 January 1989}}</ref> He then proceeded to study functional programming and became strongly motivated ("sick with desire", like Yeats) to bring these ideas to APL.<ref name=Scholes2018v/><ref name=Scholes2018t/> 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 at the APL '96 Conference in [[San Antonio]] and released in Dyalog APL in early 1997.<ref name=Scholes1996/> Acceptance and recognition were slow in coming. As late as 2008, in ''Dyalog at 25'',<ref name=Dyalog@25>{{citation journal|last=Dyalog|title=Dyalog at 25|journal=Vector|date=September 2008|url=http://www.dyalog.com/uploads/documents/dyalog_25.pdf|accessdate=2019-09-20}}</ref> a publication celebrating the 25th anniversary of Dyalog Ltd, dfns were barely mentioned (mentioned twice as "dynamic functions" and without any elaboration). As of 2019, dfns are implemented in Dyalog APL, NARS2000<ref name=NARS2000>{{citation|last=Smith|first=Bob|title=NARS2000|date=2006-2019|url=http://www.nars2000.org/|accessdate=18 September 2019}}</ref> and NGNAPL<ref name=Nickolov2013>{{citation journal|last=Nickolov|first=Nick|title=Compiling APL to JavaScript|journal=Vector|volume=26|number=1|date=September 2013|url=http://archive.vector.org.uk/art10501160|accessdate=19 September 2019}}</ref>. They also play a key role in efforts to exploit the computational capabilities of a GPU.<ref name=Hsu2019>{{cite thesis|last=Hsu|first=Aaron|title=A Data Parallel Compiler Hosted on a GPU (pre-print draft)|degree=Ph.D.|institution=Indiana University|date=2019}}</ref><ref name=APL1978>{{citation|last1=Hui|first1=Roger|last2=Kromberg|first2=Morten|title=APL Since 1978|date=June 2020}}</ref>
| | * [https://www.youtube.com/watch?v=a9xAKttWgP4 ''Game of Life''] |
| | | * [https://www.youtube.com/watch?v=DmT80OseAGs ''A Sudoku Solver in APL''] |
| Dfns is illustrated here with an example. Much more extensive explanation and examples can be found in the [[direct functions]] article and in references<ref name=dfnsWS/><ref name=APL1978/><ref name=Hui2016>{{citation|last=Hui|first=Roger|title=A History of APL in 50 Functions|date=26 November 2016|url=http://www.jsoftware.com/papers/50|accessdate=21 September 2019}}</ref>.
| | * [https://www.youtube.com/watch?v=DsZdfnlh_d0 ''Depth-first search in APL''] |
| | | * [https://www.youtube.com/watch?v=grTobtCpRUE ''Calling Alan Turing''] |
| [[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 (direct operator) Q:
| | </div> |
| <pre>
| |
| Q←{1≥≢⍵:⍵ ⋄ (∇ ⍵⌿⍨0>s)⍪(⍵⌿⍨0=s)⍪∇ ⍵⌿⍨0<s←⍵ ⍺⍺ ⍵⌷⍨?≢⍵}
| |
| | |
| ⍝ 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
| |
| </pre>
| |
| | |
| Q3 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 Q3 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.
| |
| <pre>
| |
| Q3←{1≥≢⍵:⍵ ⋄ (⊂∇ ⍵⌿⍨0>s)⍪(⊂⍵⌿⍨0=s)⍪⊂∇ ⍵⌿⍨0<s←⍵ ⍺⍺ ⍵⌷⍨?≢⍵}
| |
| | |
| (×-) 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│││ │││ │││││ ││└──────┴──┴────────┘│ │││
| |
| │││ │││ │││└┴───┴┘│ │││ │││││ │└────────────────────┴─────┴┘│
| |
| │││ │││ ││└───────┴─┴┘│ │││││ │ │
| |
| │││ │││ │└────────────┴─┴┘│││ │ │
| |
| │││ │└┴─┴─────────────────┘││ │ │
| |
| │└┴─┴──────────────────────┘│ │ │
| |
| └───────────────────────────┴─┴─────────────────────────────┘
| |
| </pre>
| |
| | |
| The above formulation is not new; see for example Figure 3.7 of the classic ''The Design and Analysis of Computer Algorithms''.<ref name=AHU>{{citation|last1=Aho|first1=A.V.|last2=Hopcroft|first2=J.E.|last3=Ullman|first3=J.D.|title=The Design and Analysis of Computer Algorithms|date=1974|publisher=Addison-Wesley}}</ref> However, unlike the [[Pidgin code|pidgin ALGOL]] program in Figure 3.7, Q is executable, and the partial order used in the sorting is an operand, the (×-) the examples above.<ref name=APL1978/>
| |
| | |
| === Articles and presentations ===
| |
| | |
| {{Div col}}
| |
| * 1985 ''Operators & Nested Arrays''<ref name=Scholes1985>{{citation|last=Scholes|first=John|title=Operators & Nested Arrays|journal=Vector|volume=2|number=1|date=July 1985}}</ref>
| |
| * 1989 ⎕''sm: A Full-Screen Manager for Dyalog APL''<ref name=CurtinScholes1989>{{citation journal|last1=Curtin|first1=A.D.|last2=Scholes|first2=J.M.|title=⎕sm: A Full-Screen Manager for Dyalog APL|journal=APL Quote Quad|volume=19|number=4|date=August 1989}}</ref>
| |
| * 1990 ''Workshop on Defined Operators''<ref name=Scholes1990a>{{citation|last=Scholes|first=John|title=Workshop on Defined Operators|journal=Vector|volume=6|number=4|date=April 1990}}</ref>
| |
| * 1990 ''A New Development Environment in Dyalog APL''<ref name=Scholes1990b>{{citation|last=Scholes|first=John|title=A New Development Environment in Dyalog APL|journal=Vector|volume=6|number=4|date=April 1990}}</ref>
| |
| * 1994 ''Meeting: Dyalog APL Namespaces''<ref name=Scholes1994>{{citation|last=Scholes|first=John|title=Meeting: Dyalog APL Namespaces|journal=Vector|volume=11|number=1|date=July 1994|url=http://archive.vector.org.uk/art10007730|accessdate=21 September 2019}}</ref>
| |
| * 1996 ''Direct Functions in Dyalog APL''<ref name=Scholes1996>{{citation journal|last=Scholes|first=John|title=Direct Functions in Dyalog APL|journal=Vector|volume=13|number=2|date=October 1996|url=http://www.dyalog.com/uploads/documents/Papers/dfns.pdf|access-date=16 September 2019}}</ref>
| |
| * 1998 ''APL98 Workshop – Threads in Dyalog APL''<ref name=Scholes1998a>{{citation|last=Scholes|first=John|title=APL98 Workshop – Threads in Dyalog APL|journal=Vector|volume=15|number=2|date=October 1998}}</ref>
| |
| * 1998 ''Threads: An Introduction to Multithreading''<ref name=Scholes1998b>{{citation|last=Scholes|first=John|title=Threads: An Introduction to Multithreading|journal=Vector|volume=15|number=2|date=October 1998}}</ref>
| |
| * 2001 ''D: A Functional Subset of Dyalog APL''<ref name=Scholes2001a>{{citation|last=Scholes|first=John|title=D: A Functional Subset of Dyalog APL|journal=Vector|volume=17|number=4|date=April 2001|url=http://archive.vector.org.uk/art10007770|accessdate=21 September 2019}}</ref>
| |
| * 2001 ''Letter: Localising the Effects of System Functions in D''<ref name=Scholes2001b>{{citation|last=Scholes|first=John|title=Localising the Effects of System Functions in D|journal=Vector|volume=18|number=1|date=July 2001}}</ref>
| |
| * 2003 ''dfns@dyalog.com''<ref name=Scholes2003a>{{citation|last=Scholes|first=John|title=dfns@dyalog.com|journal=Vector|volume=20|number=1|date=July 2003}}</ref>
| |
| * 2003 ''Hungarian Method Cost Assignment''<ref name=Scholes2003b>{{citation|last=Scholes|first=John|title=Hungarian Method Cost Assignment|journal=Vector|volume=20|number=1|date=July 2003|url=http://archive.vector.org.uk/art10007790|accessdate=21 September 2019}}</ref>
| |
| * 2004 ''A Note on Graphs''<ref name=Scholes2004>{{citation|last=Scholes|first=John|title=A Note on Graphs|journal=Vector|volume=20|number=4|date=April 2004}}</ref>
| |
| * 2005 ''How to Write Computer Programs''<ref name=Scholes2005>{{citation|last=Scholes|first=John|title=How to Write Computer Programs|journal=Vector|volume=21|number=3|date=May 2005 |url=http://www.dyalog.com/uploads/documents/Papers/declarative_prog.pdf|accessdate=21 September 2019}}</ref>
| |
| * 2006 ''Language Extensions''<ref name=Scholes2006a>{{citation|last=Scholes|first=John|title=Language Extensions|publisher=Dyalog '06 User Conference|date=17 October 2006}}</ref>
| |
| * 2006 ''Functions as Results''<ref name=Scholes2006b>{{citation|last=Scholes|first=John|title=Functions as Results|publisher=Dyalog '06 User Conference|date=17 October 2006|url=https://www.dyalog.com/uploads/conference/dyalog06/presentations/07_Scholes_FuncsAsResults/fre.pdf|accessdate=21 September 2019}}</ref>
| |
| * 2007 ''Version 11.1 Performance Enhancements''<ref name=DelcrosScholes2007a>{{citation|last1=Delcros|first1=Nicolas|last2=Scholes|first2=John|title=Version 11.1 Performance Enhancements|publisher=Dyalog '07 User Conference|date=1 October 2007}}</ref>
| |
| * 2007 ''An Investigation into Higher Level Operators''<ref name=Scholes2007>{{citation|last=Scholes|first=John|title=An Investigation into Higher Level Operators|publisher=Dyalog '07 User Conference|date=1 October 2007}}</ref>
| |
| * 2008 ''Interpreter Performance''<ref name=DelcrosScholes2008>{{citation|last1=Delcros|first1=Nicolas|last2=Scholes|first2=John|title=Interpreter Performance|publisher=Dyalog '08 User Conference|date=13 October 2008}}</ref>
| |
| * 2008 ''Journaled Files'' (video)<ref name=ScholesSmith2008v>{{citation|last1=Scholes|first1=John|last2=Smith|first2=Richard|title=Journaled Files (video)|publisher=Dyalog '07 User Conference|date=13 October 2008|url=http://www.youtube.com/watch?v=TwvgyNOtoK8|accessdate=21 September 2019}}</ref> (text)<ref name=ScholesSmith2008t>{{citation|last1=Scholes|first1=John|last2=Smith|first2=Richard|title=Journaled Files (text)|publisher=Dyalog '07 User Conference|date=13 October 2008|url=https://www.dyalog.com/uploads/conference/dyalog08/presentations/08_SmithScholes_JournaledFiles.ppt|accessdate=21 September 2019}}</ref>
| |
| * 2008: ''A Plea for Simplicity'' (video)<ref name=Scholes2008>{{citation|last=Scholes|first=John|title=A Plea for Simplicity|date=13 October 2018|publisher=Dyalog '08 User Conference|url=http://www.youtube.com/watch?v=vUS0t-z1-iA|accessdate=21 September 2019}}</ref>
| |
| * 2009 ''Conway's Game of Life in APL'' (video)<ref name=life>{{citation|last=Scholes|first=John|title=Conway's Game of Life in APL (video)|date=26 January 2009|url=http://www.youtube.com/watch?v=a9xAKttWgP4|accessdate=21 September 2019}}</ref>
| |
| * 2009 ''Introduction to D-functions'' (video1)<ref name=Scholes2009b>{{citation|last=Scholes|first=John|title=Introduction to D-functions (video1)|publisher=Dyalog '09 User Conference|date=13 September 2009|url=http://www.youtube.com/watch?v=OZARVrGQQho|accessdate=21 September 2019}}</ref> (video2)<ref name=Scholes2009c>{{citation|last=Scholes|first=John|title=Introduction to D-functions (video2)|publisher=Dyalog '09 User Conference|date=13 September 2009|url=http://www.youtube.com/watch?v=RQNSe9s_3eE|accessdate=21 September 2019}}</ref> | |
| * 2009 ''Session Whizbangs''<ref name=Scholes2009a>{{citation|last=Scholes|first=John|title=Session Whizbangs|publisher=Dyalog '09 User Conference|date=13 September 2009}}</ref>
| |
| * 2009: ''Complex Numbers'' (video)<ref name=Scholes2009>{{citation|last=Scholes|first=John|title=Complex Numbers|journal=Dyalog '19 User Conference|date=14 September 2009|url=http://www.youtube.com/watch?v=8ic0ctto1HU|accessdate=21 September 2019}}</ref>
| |
| * 2010 ''Workshop—Introduction to D-functions'' (video1)<ref name=Scholes2010a>{{citation|last=Scholes|first=John|title=Workshop—Introduction to D-functions (video1)|publisher=Dyalog '10 User Conference|date=14 September 2010|url=http://www.youtube.com/watch?v=-xsP154fE0o|accessdate=21 September 2019}}</ref> (video2)<ref name=Scholes2010b>{{citation|last=Scholes|first=John|title=Workshop—Introduction to D-functions (video2)|publisher=Dyalog '10 User Conference|date=14 September 2010|url=http://www.youtube.com/watch?v=DkLxe9z1BKs|accessdate=21 September 2019}}</ref>
| |
| * 2011 ''Conference Edition Workshop''<ref name=Foadetal>{{citation|last1=Foad|first1=Jay|last2=Scholes|first2=John|last3=Hui|first3=Roger|title=Conference Edition Workshop|publisher=Dyalog '11 User Conference|date=2 October 2011}}</ref>
| |
| * 2011 ''Introducing the Dyalog '11 Conference Edition''<ref name=ScholesHui2001>{{citation|last1=Scholes|first1=John|last2=Hui|first2=Roger|title=Introducing the Dyalog '11 Conference Edition|publisher=Dyalog '11 User Conference|date=3 October 2011}}</ref>
| |
| * 2011 ''APL#'' (video)<ref name=Krombergetalv>{{citation|last1=Kromberg|first1=Morten|last2=Scholes|first2=John|last3=Manktelow|first3=Jonathan|title=APL# (video)|publisher=Dyalog '11 User Conference|date=3 October 2011|url=http://www.youtube.com/watch?v=mZ_qkXb_tV8|accessdate=21 September 2019}}</ref> (text)<ref name=Krombergetalt>{{citation|last1=Kromberg|first1=Morten|last2=Scholes|first2=John|last3=Manktelow|first3=Jonathan|title=APL# (text)|publisher=Dyalog '11 User Conference|date=3 October 2011|url=http://www.dyalog.com/uploads/conference/dyalog11/presentations/D08_apl_sharp|accessdate=21 September 2019}}</ref>
| |
| * 2011 ''Function Trains for Dyalog APL''<ref name=Scholes2001>{{citation|last=Scholes|first=John|title=Function Trains for Dyalog APL|publisher=Dyalog '11 User Conference|date=3 October 2011}}</ref>
| |
| * 2011: ''What is Functional Programming?'' (video)<ref name=ScholesHui2011>{{citation|last1=Scholes|first1=John|last2=Hui|first2=Roger|title=What is Functional Programming?|date=3 October 2011|publisher=Dyalog '11 User Conference|url=http://www.youtube.com/watch?v=bQlH49krwbk|accessdate=21 September 2019}}</ref>
| |
| * 2011 ''Closures''<ref name=Scholes2011>{{citation|last=Scholes|first=John|title=Closures|publisher=Dyalog '11 User Conference|date=5 October 2011}}</ref>
| |
| * 2012 ''Potential Version 14.0 Language Features'' (video)<ref name=ScholesHui2012v>{{citation|last1=Scholes|first1=John|last2=Hui|first2=Roger|title=Potential Version 14.0 Language Features (video)|publisher=Dyalog '12 User Conference|date=15 October 2012|url=http://www.youtube.com/watch?v=KrrHYjPXc84|accessdate=21 September 2019}}</ref> (text)<ref name=ScholesHui2012t>{{citation|last1=Scholes|first1=John|last2=Hui|first2=Roger|title=Potential Version 14.0 Language Features (text)|publisher=Dyalog '12 User Conference|date=15 October 2012|url=http://www.dyalog.com/uploads/conference/dyalog12/presentations/D04_14.0/v14.0_Roger.zip|accessdate=21 September 2019}}</ref>
| |
| * 2012: ''State-Free Programming'' (video)<ref name=Scholes2012a>{{citation|last=Scholes|first=John|title=State-Free Programming|date=15 October 2012|publisher=Dyalog '12 User Conference|url=http://www.youtube.com/watch?v=L5rYVxPXV70|accessdate=21 September 2019}}</ref>
| |
| * 2012 ''A Sudoku Solver in APL'' (video)<ref name=Scholes2012b>{{citation|last=Scholes|first=John|title=A Sudoku Solver in APL (video)|date=27 October 2012|url=http://www.youtube.com/watch?v=DmT80OseAGs|accessdate=21 September 2019}}</ref>
| |
| * 2013 ''Train Spotting in Version 14.0'' (video)<ref name=Scholes2013v>{{citation|last=Scholes|first=John|title=Train Spotting in Version 14.0|publisher=Dyalog '13 User Conference|date=22 October 2013|url=http://www.youtube.com/watch?v=7-93GzDqC08|accessdate=21 September 2019}}</ref> (text)<ref name=Scholes2013t>{{citation|last=Scholes|first=John|title=Train Spotting in Version 14.0|publisher=Dyalog '13 User Conference|date=22 October 2013|url=http://www.dyalog.com/uploads/conference/dyalog13/presentations/D09_Train_Spotting_in_Version_14.pdf|accessdate=21 September 2019}}</ref> | |
| * 2013: ''Social Skills for Programmers'' (video)<ref name=Scholes2013>{{citation|last=Scholes|first=John|title=Social Skills for Programmers|date=22 October 2013|publisher=Dyalog '13 User Conference|url=http://www.youtube.com/watch?v=3qGsCrkWT-4|accessdate=21 September 2019}}</ref>
| |
| * 2014 ''Depth-First Search in APL'' (video)<ref name=DFS>{{citation|last=Scholes|first=John|title=Depth-First Search in APL (video)|date=21 June 2014|url=http://www.youtube.com/watch?v=DsZdfnlh_d0|accessdate=21 September 2019}}</ref>
| |
| * 2014: ''Distractions'' (video)<ref name=Scholes2014>{{citation|last=Scholes|first=John|title=Distractions|date=22 September 2014|publisher=Dyalog '14 User Meeting|url=http://www.youtube.com/watch?v=pVrNT2lGUUo|accessdate=21 September 2019}}</ref>
| |
| * 2015 ''Dya(b)log'' (video)<ref name=DyalogBlogv>{{citation|last1=Smith|first1=Fiona|last2=Scholes|first2=John|last3=Smith|first3=Richard|last4=Hui|first4=Roger|title=Dya(b)log (video)|publisher=Dyalog '15 User Meeting|date=7 September 2015|url=http://www.youtube.com/watch?v=seUjVLC00lQ|accessdate=21 September 2019}}</ref> (text)<ref name=DyalogBlogt>{{citation|last1=Smith|first1=Fiona|last2=Scholes|first2=John|last3=Smith|first3=Richard|last4=Hui|first4=Roger|title=Dya(b)log (text)|publisher=Dyalog '15 User Meeting|date=7 September 2015|url=http://www.dyalog.com/uploads/conference/dyalog15/presentations/D09_Dyablog.pdf|accessdate=21 September 2019}}</ref> | |
| * 2015 ''Future Operator Proposals: Cut, Under, and Merge'' (video)<ref name=mergev>{{citation|last1=Scholes|first1=John|last2=Hui|first2=Roger|title=Future Operator Proposals: Cut, Under, and Merge (video)|publisher=Dyalog '15 User Meeting|date=10 September 2015|url=http://www.youtube.com/watch?v=9KOto3xXS3c|accessdate=21 September 2019}} (text)</ref> (text)<ref name=merget>{{citation|last1=Scholes|first1=John|last2=Hui|first2=Roger|title=Future Operator Proposals: Cut, Under, and Merge (text)|publisher=Dyalog '15 User Meeting|date=10 September 2015|url=http://www.dyalog.com/uploads/conference/dyalog15/presentations/D16_Future_Operator_Proposals.zip|accessdate=21 September 2019}} (text)</ref>
| |
| * 2016 ''New Primitive Functions and Operators'' (video)<ref name=ScholesHui2016v>{{citation|last1=Scholes|first1=John|last2=Hui|first2=Roger|title=New Primitive Functions and Operators (video)|publisher=Dyalog '16 User Meeting|date=10 October 2016|url=http://www.youtube.com/watch?v=vms4_Fpqmv8|accessdate=21 September 2019}}</ref> (text)<ref name=ScholesHui2016t>{{citation|last1=Scholes|first1=John|last2=Hui|first2=Roger|title=New Primitive Functions and Operators (text)|publisher=Dyalog '16 User Meeting|date=10 October 2016|url=http://www.dyalog.com/uploads/conference/dyalog16/presentations/D06_New_Primitives_RH.zip|accessdate=21 September 2019}}</ref> (script)<ref name=ScholesHui2016s>{{citation|last1=Scholes|first1=John|last2=Hui|first2=Roger|title=New Primitive Functions and Operators (script)|publisher=Dyalog '16 User Meeting|date=10 October 2016|url=http://www.dyalog.com/uploads/conference/dyalog16/presentations/D06_New_Primitives_JS.txt|accessdate=21 September 2019}}</ref>
| |
| * 2016 ''Dyalog Implementation—The Early Years'' (video)<ref name=Taylor2016>{{citation|last1=Taylor|first1=Stephen|last2=Streeter|first2=Geoff|last3=Scholes|first3=John|title=Dyalog Implementation—The Early Years (video)|publisher=Dyalog '16 User Meeting|date=12 October 2016|url=http://www.youtube.com/watch?v=WsmS4XBFvH0|accessdate=21 September 2019}}</ref>
| |
| * 2017 ''A Case Study—Recoding from Procedural to Denotative Style'' (video)<ref name=Scholes2017v>{{citation|last=Scholes|first=John|title=A Case Study—Recoding from Procedural to Denotative Style|publisher=Dyalog '17 User Meeting|date=11 September 2017|url=http://www.youtube.com/watch?v=74xrZkVlns0|accessdate=21 September 2019}}</ref> (text)<ref name=Scholes2017t>{{citation|last=Scholes|first=John|title=A Case Study—Recoding from Procedural to Denotative Style|publisher=Dyalog '17 User Meeting|date=11 September 2017|url=http://www.dyalog.com/uploads/conference/dyalog17/presentations/D04_Recoding_from_Procedural_to_Denotative_Style.pdf|accessdate=21 September 2019}}</ref>
| |
| * 2018 ''Dfns—Past, Present and Future'' (video)<ref name=Scholes2018v/> (text)<ref name=Scholes2018t/>
| |
| {{Div col end}}
| |
| | |
| === Wit ===
| |
| 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:
| |
| * Dyalog '08: ''A Plea for Simplicity'' (video)<ref name=Scholes2008/>
| |
| * Dyalog '09: ''Complex Numbers'' (video)<ref name=Scholes2009/>
| |
| * Dyalog '11: ''What is Functional Programming?'' (video)<ref name=ScholesHui2011/>
| |
| * Dyalog '12: ''State-Free Programming'' (video)<ref name=Scholes2012a/>
| |
| * Dyalog '12: ''Calling Alan Turing'' (extract of previous item)<ref name=Turingv>{{citation|last=Scholes|first=John|title=Calling Alan Turing|date=15 October 2012|publisher=Dyalog '12 User Conference|url=http://www.youtube.com/watch?v=grTobtCpRUE|accessdate=22 September 2019}}</ref>
| |
| * Dyalog '13: ''Social Skills for Programmers'' (video)<ref name=Scholes2013/>
| |
| * Dyalog '14: ''Distractions'' (video)<ref name=Scholes2014/>
| |
| | |
| Other examples can be found in ''Scholisms''.<ref name=Scholisms>{{citation|last=Scholes|first=John|editor=Roger Hui|title=Scholisms|url=http://johnscholes.rip/scholisms/|accessdate=20 September 2019}}</ref>
| |
|
| |
|
| == References == | | == References == |
| {{Reflist}}
| | <references/> |
| | | {{APL community}}{{DEFAULTSORT:Scholes}}[[Category:People]][[Category:Dyalog Ltd. employees]][[Category:Designers]][[Category:Executives]][[Category:Implementers]] |
| ==External links==
| |
| * [http://johnscholes.rip/ John Scholes (1948–2019): Genius, Gentleman, and Mischievous Schoolboy]
| |
| * [http://dfns.dyalog.com/ Direct Functions]
| |
| | |
| {{APL programming language}} | |
| {{authority control}}
| |
| | |
| {{DEFAULTSORT:Scholes, John M.}} | |
| [[Category:1948 births]] | |
| [[Category:2019 deaths]] | |
| [[Category:Alumni of the University of Manchester]]
| |
| [[Category:APL implementers]]
| |
| [[Category:British computer programmers]] | |
| [[Category:Programming language designers]] | |
| | |
| {{APL community}}[[Category:People|Scholes]]
| |