APL Projects


I first encountered APL in 1969 while working for NSA. Two years later, I left that job to work for STSC just so I could devote more time to studying and contributing to the language. I've never stopped thinking about APL even when I left the field to start my own company. As you can see, my interests tend towards system-level, and at times, obscure and useless areas. The following pages describe some of my APL-related projects.

Projects and Papers

Nested Arrays System: This reference manual by Carl M. Cheney describes the initial release in 1981 of the APL*PLUS Nested Arrays System (NARS) from STSC. It is from this work, a quarter century later, that the current NARS2000 implementation is based.

Don't Quote Me: (30 June 2016 11:37:00) In Gary Bergquist's 2001 Q2 issue of his newsletter, he posed an interesting problem about parsing lines of APL in which both single and double quote marks are used. The problem is to determine which quote marks are used to delimit strings and which ones are inside a string. The solution I came up with solves the problem in a non-looping manner using, of all things, Matrix Divide.

A Glitch in Grade: (30 June 2016 11:35:23) While implementing Howard J. Smith, Jr.'s clever algorithm for dyadic character grade, I encountered a puzzle the explanation of which illuminates just how this primitive achieves its remarkable result. Moreover, there are free implementations of the comparison routine of this primitive in other languages (C, Perl, PHP).

APL in Unicode: (07 December 2013 13:26:48) While writing up my solution for the Don't quote Me problem mentioned above, I had a lot of trouble getting a single APL font for that page to display correctly in both Mozilla Firefox and Internet Explorer until I came across the Unicode fonts. I liked that solution so much, I wrote a script which can also be used as an Apache Web Server handler as well as at the command line.

APL Keyboard: (03 February 2017 22:36:53) If you have trouble remembering where all the special APL symbols are on the keyboard, maybe this will help.

Entering APL Characters in Email: (07 December 2013 13:24:40) One of the more vexing problems with APL is the difficulty in entering its characters into your favorite email program so you can share code with others. Wouldn't it be nice if you could enter APL characters just as you do inside an APL interpreter? If your favorite email program is Mozilla's Thunderbird, here's how to do exactly that.

Anatomy of an Idiom: (30 June 2016 11:34:05) Here's a challenging idiom (Progressive Dyadic Iota) you might have seen before, but never quite understood — let's dissect it.

NARS2000: This project implements a full APL interpreter, started in September 2006, work on which is ongoing.

Boolean Functions: (03 January 2006 08:45:44) Almost from the very beginning of my involvement with APL, the idea of Boolean data interested me, hence the nickname. Here's a scan of an old (1982) paper on Boolean Functions including a paper I wrote for the APL79 Conference Proceedings entitled "A Programming Technique For Non-rectangular Data".

Prototype Functions: (14 August 2010 14:58:56) This paper given at the APL2010 Conference in Berlin discusses prototypes in depth and introduces the concept of a prototype function associated with every primitive function and operator.

Reduction Of Singletons: (27 August 2014 12:17:54) This presentation given at the 2010 APL Implementors Workshop in Minnowbrook, NY discusses changes to the definition of reduction when the argument is a singleton, and explains why ,/⍬ fails but ,/0⍴⊂⍬ works.

Rational & Variable-precision Floating Point Numbers: (18 June 2016 07:01:26) This presentation given at the 2011 APL Implementors Workshop in Minnowbrook, NY discusses the design and implementation of the multiple-precision numbers in its title.

Inverting Over-Determined Matrices: (16 November 2012 14:19:32) This presentation given at the 2011 APL Implementors Workshop in Minnowbrook, NY discusses a method and mathematical proof of how to express in APL inversion of over-determined matrices using matrix inversion of square non-singular matrices only.

Progress in NARS2000 October 2011 to September 2013: (04 September 2013 10:34:49) This presentation given at the 2013 APL Implementors Workshop in Minnowbrook, NY discusses what has changed in NARS2000 since the previous meeting.

APL Characters and Their Aliases: (22 June 2016 16:06:32) This paper attempts to raise awareness of the different choices of APL characters in Unicode and how we can avoid confusing the end user by recognizing the set of aliases as functions.

Progress in NARS2000 October 2013 to September 2015: (23 September 2015 14:15:42) This presentation given at the 2015 APL Implementors Workshop in Minnowbrook, NY discusses what has changed in NARS2000 since the previous meeting.

Hypercomplex Numbers in APL: (18 June 2016 07:08:13) This presentation given at the 2015 APL Implementors Workshop in Minnowbrook, NY discusses the design and implementation of Hypercomplex fixed and multiple precision numbers in APL.

Complex Floor Boundaries in APL: (19 November 2015 06:18:01) This paper analyzes two algorithms that implement Gene McDonnell's definition of Complex Floor and discusses where and why they differ in certain edge conditions using interval and precision analysis.

Hypercomplex GCD in APL: (28 January 2017 12:21:39) This paper analyzes two algorithms that implement Complex Floor and discusses how to define Euclidean Division (Greatest Common Divisor or GCD) on Hypercomplex numbers. In the process, limitations on the Floor, Ceiling, GCD, LCM, Residue, Encode, and Base Value primitives are discussed. (Spoiler Alert) It doesn't end well for Octonions.

Hypercomplex Quotients in APL: (25 May 2016 05:15:06) This paper introduces the concept of Division Quotients along with a new System Variable, and investigates how it applies to various APL primitives such as GCD, LCM, Residue, Encode, and Base Value on non-commutative numbers.

Hypercomplex Notation in APL: (26 January 2017 10:36:32) This paper summarizes the various forms of notation for entering and displaying Hypercomplex numbers.

Hypercomplex Implementation in APL: (08 June 2016 14:59:10) This paper discusses the issues involved with implementing Hypercomplex numbers — it is of interest mostly to system developers.

A Combinatorial Operator in APL: (22 November 2016 17:31:47) This paper discusses a proposed combinatorial operator that consolidates several of the fundamental combinatorial algorithms (permutations, combinations, partitions, compositions, etc.) into one concept. Way cool!

50 Years of APL Datatypes: (04 November 2016 18:34:27) This paper was discussed at the Dyalog '16 conference on "50 Years of APL" on October 12, 2016 in Glasgow, Scotland.


Rather than gather email addresses, maintain a mailing list, deal with privacy issues, etc., I'd prefer if you are interested in being notified when I release a new paper on APL that you sign up with a (free) service that does this such as the one linked to at the bottom of this page.


This page was created by Bob Smith -- please any questions or comments about it to me.

Valid XHTML 1.0! Valid CSS!
NARS2000 © 2006-2017
Get GPL v3!   Get Firefox!   Get Thunderbird!   Get LibreOffice!  
Be notified of
page updates
it's private
powered by
Comments or suggestions? Send them to .