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: (26 August 2014 14:51:44) 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 Sudoku Tutorial: (16 December 2007 22:00:00) The game of Sudoku has been all the rage for quite a few years. Back in 2006, I, too, wrote a solver, but with a twist. This program, written as a tutorial, is designed to help you become an expert Sudoku player. It does this by providing helpful clues at every stage which reflect how an expert player would solve the puzzle. It is written in (ancient) APL+Win v3.5. The .zip file pointed to by the above link contains the entire application, source code and all. To run the program, download the .zip file to your Windows (only) system, unzip it in its own directory, and run the .exe program. The .exe program needs several of the other files in the .zip file in order to run.

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: (22 September 2018 15:16:59) 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: (05 April 2017 16:37:46) 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 at the Minnowbrook Conference Center, Blue Mountain Lake, 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 at the Minnowbrook Conference Center, Blue Mountain Lake, NY discusses what has changed in NARS2000 since the previous meeting.

Hypercomplex Numbers in APL: (11 April 2018 09:35:42) 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: (11 April 2018 08:43:38) 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: (11 April 2018 09:25:34) 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: (09 April 2018 18:53:32) This paper summarizes the various forms of notation for entering and displaying Hypercomplex numbers.

Hypercomplex Implementation in APL: (11 April 2018 09:27:05) This paper discusses the issues involved with implementing Hypercomplex numbers — it is of interest mostly to system developers.

A Combinatorial Operator in APL: (23 June 2017 09:10:42) This paper discusses a 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.

Progress in NARS2000 October 2015 to September 2017: (10 September 2017 18:24:00) This presentation given at the 2017 APL Implementors Workshop at the Minnowbrook Conference Center, Blue Mountain Lake, NY discusses what has changed in NARS2000 since the previous meeting.

A Matrix Operator in APL (PRELIMINARY): (10 September 2017 18:21:38) This PRELIMINARY paper discusses a proposed Matrix operator that applies scalar functions to an entire matrix.


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-2018
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 .