Readability: Difference between revisions

From APL Wiki
Jump to navigation Jump to search
No edit summary
Line 11: Line 11:
This was a common technique before [[Left]] was added to the language:
This was a common technique before [[Left]] was added to the language:
:<source lang=apl inline>X←'line1' ⊣ Y←'line2'</source>
:<source lang=apl inline>X←'line1' ⊣ Y←'line2'</source>
The Diamond [[statement separator]] (<source lang=apl inline>⋄</source>) provides an alternative means of inlining multiple statements.
The Diamond [[statement separator]] (<source lang=apl inline>⋄</source>) provides an alternative means of inlining multiple statements:
:<source lang=apl inline>Y←'line2' ⋄ X←'line1'</source>
Note that in all these cases, <source lang=apl inline>Y</source> is assigned first.
 
=== Morten Kromberg ===
=== Morten Kromberg ===
[[Morten Kromberg]] asked one of his colleagues to “Please avoid this kind of pornography:”
[[Morten Kromberg]] asked one of his colleagues to “Please avoid this kind of pornography:”

Revision as of 05:48, 25 September 2020

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 as function the 2-train ⍎⎕NS) makes for a much more readable version would be:

ns←⍎ns container.⎕NS ⍬

This makes it clearer that the name ns is reassigned to a new namespace inside the container namespace, with the new namespace taking the original value of ns as name.