From APL

bearophile bearophileHUGS at lycos.com
Thu Sep 20 04:55:48 PDT 2012


The paper touches only a small subset of what's needed to write 
modern program, it's mostly about array operations and related 
matters. It compares some parts of the old Fortran 88 with parts 
of the dead APL language. The author seems fond of APL, and 
several things written in the paper are unfair:

"Fortran 88 Arrays - Paper Clips and Rubber Bands" (2001), by 
Robert Bernecky:
http://www.snakeisland.com/fortran8.htm

Some of the ideas of APL are widely used in modern functional 
languages. D contains array operations and Phobos contains some 
higher order operations similar to some APL verbs and adverbs.

------------------

Section 2.3 is about Scan operations, that are like reduce or 
fold, but keep all the intermediate results too:

+\ of 3 1 2 4

is 3 4 6 10

Some lazy scans are present in the Haskell Prelude too (and in 
Mathematica) (the Prelude contains functions and constants that 
are loaded on default):
http://zvon.org/other/haskell/Outputprelude/scanl_f.html

I think scans are not present in Phobos. Maybe one or two are 
worth adding.

------------------

Section 2.5 suggests to generalize the dot product:

>If the + and * of the Fortran 77 DO loops for inner product are 
>replaced by other functions, a whole family of interesting inner 
>products appear,<

Some examples of usage (in J language):

Associative search                   *./..=y
Inverted associative                 x+./..~:y
Minima of residues for primes        x<./..|y
Transitive closure step on Booleans  y+./..*.y
Minima of maxima                     x<./..>.y

Maybe a higher order function named "dot" (that takes two 
callables) is worth adding to Phobos. But I am not sure.

------------------

Section 2.6 reminds us that a transpose() is a commonly useful 
function. A transpose is handy to have in Phobos.

Bye,
bearophile


More information about the Digitalmars-d mailing list