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 16: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 13: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: (17 December 2007 00: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 13: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: (14 July 2020 21:50:16) 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: (16 October 2023 13:40:20) If you have trouble remembering where all the special APL symbols are on the keyboard, maybe this will help.

Entering APL Characters in Email: (14 July 2020 21:48: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 13: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 10: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 16: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 18: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 09: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 16: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 12: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: 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. It has been improved and moved to the APL Wiki where APL system implementor's may keep it up-to-date themselves.

Progress in NARS2000 October 2013 to September 2015: (23 September 2015 16: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 11: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 08: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 10:43:38) This paper analyzes two algorithms 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 11: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 20:53:32) This paper summarizes the various forms of notation for entering and displaying Hypercomplex numbers.

Hypercomplex Implementation in APL: (11 April 2018 11: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 11: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 20: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 20: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 20:21:38) This PRELIMINARY paper discusses a proposed Matrix operator that applies scalar functions to an entire matrix.

Integer-only Functions v. Floating Point Numbers: (24 February 2020 17:29:07) This paper presents the argument that certain integer-only primitives (GCD, LCM, Residue, and Encode) should be limited to integers only, not floating point numbers.

When To Use ⎕CT With Rationals (PRELIMINARY): (14 November 2017 16:32:00) This PRELIMINARY paper poses the unsettled question in its title and outlines the arguments pro and con.

A Transform Hyperator in APL (PRELIMINARY): (21 July 2019 10:51:16) This PRELIMINARY paper describes a new syntax which is one level beyond Arrays, Functions, and Operators.

Numerical Differentiation in APL: (16 September 2019 16:17:54) This paper describes a new operator to perform Numerical Differentiation on arbitrary functions.

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

Solving Simultaneous Linear Diophantine Equations in APL: (16 October 2023 17:24:03) This paper describes how solve SLDEs in APL.

Fractional Calculus in APL: (29 September 2023 20:15:23) This paper describes how to perform calculations with Fractional Calculus in APL.


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