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.

## Examples

### Gilman & Rose

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

`r←(+/x×y)÷((+/(x←x-(+/x)÷⍴x)*2)×+/(y←y-(+/y)÷⍴y)*2)×.5`

### IBM

The APL2 Idiom list includes the following entry:

 `X←'line1',0⍴Y←'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:”

`ns(⍎container.⎕NS)←⍬`

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

`ns←ns container.(⍎⎕NS) ⍬`

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

`ns←⍎ns 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`.