From APL Wiki
Jump to navigation Jump to search

Maintaining readability of APL can take a special effort. It is easy to write very dense code, and the mathematical look of APL can encourage usage of single-letter names. Traditionally, APLers use the term pornography to describe code that is hard to read, or uses unusual constructs. Code golf often results in pornographic code.


Gilman & Rose

In APL – an Interactive Approach, the authors the authors describe the following code, which computes the correlation coefficient, as “almost pornographic”:



The APL2 Idiom list includes the following entry:

X'line1',0Y'line2' ⍝ Pornography. Combining two lines into one.

This was a common technique before Left was added to the language:

X'line1' Y'line2'

The Diamond statement separator () provides an alternative means of inlining multiple statements:

Y'line2' X'line1'

Note that in all these cases, Y is assigned first.

Morten Kromberg

Morten Kromberg asked one of his colleagues to “Please avoid this kind of pornography:”


Avoiding the unusual modified assignment (using the 2-train ⎕NS as modifying function) helps:

nsns container.(⎕NS)

Finally, splitting the 2-train apart makes it even clearer:

nsns container.⎕NS

A new namespace, with the original value of ns as name, is created inside container and the character representation '#.container.ns' is returned from ⎕NS to which evaluates the name to a reference, that in turn replaces the previous value of ns.