# APL Symbols Meaning and Code Example

By Xah Lee. Date:

NameNotationMeaning
Roll?One integer selected randomly from the first B integers
CeilingβLeast integer greater than or equal to B
FloorβGreatest integer less than or equal to B
Shapeβ΄Number of components in each dimension of B
NotβΌLogical: βΌ1 is 0, βΌ0 is 1
Absolute valueβ£Magnitude of B
Index generatorβ³Vector of the first B integers
Exponentialβe to the B power
NegationβChanges sign of B
Identity+No change to B
SignumΓΒ―1 if B<0; 0 if B=0; 1 if B>0
ReciprocalΓ·1 divided by B
Ravel,Reshapes B into a vector
Matrix inverseβΉInverse of matrix B
Pi timesβMultiply by Ο
LogarithmβNatural logarithm of B
Reversalβ½Reverse elements of B along last axis
ReversalβReverse elements of B along first axis
Grade upβIndices of B which will arrange B in ascending order
Grade downβIndices of B which will arrange B in descending order
ExecuteβExecute an APL expression
Monadic formatβA character representation of B
Monadic transposeβReverse the axes of B
Factorial !Product of integers 1 to B

NameNotationMeaning
SubtractβA minus B
MultiplyΓA multiplied by B
DivideΓ·A divided by B
ExponentiationβA raised to the B power
CircleβTrigonometric functions of B selected by A. A=1: sin(B) A=2: cos(B) A=3: tan(B)
Deal?A distinct integers selected randomly from the first B integers
Membershipβ1 for elements of A present in B; 0 where not.
MaximumβThe greater value of A or B
MinimumβThe smaller value of A or B
Reshapeβ΄Array of shape A with data B
TakeβSelect the first (or last) A elements of B according to ΓA
DropβRemove the first (or last) A elements of B according to ΓA
Decodeβ₯Value of a polynomial whose coefficients are B at A
Encodeβ€Base-A representation of the value of B
Residueβ£B modulo A
Catenation,Elements of B appended to the elements of A
Expansion\Insert zeros (or blanks) in B corresponding to zeros in A
Compression/Select elements in B corresponding to ones in A
Index ofβ³The location (index) of B in A; 1+β/β³β΄A if not found
Matrix divideβΉSolution to system of linear equations Ax = B
Rotationβ½The elements of B are rotated A positions
RotationβThe elements of B are rotated A positions along the first axis
LogarithmβLogarithm of B to base A
Dyadic formatβFormat B into a character matrix according to A
General transposeβThe axes of B are ordered by A
Combinations!Number of combinations of B taken A at a time
Less than<Comparison: 1 if true, 0 if false
Less than or equalβ€Comparison: 1 if true, 0 if false
Equal=Comparison: 1 if true, 0 if false
Greater than or equalβ₯Comparison: 1 if true, 0 if false
Greater than>Comparison: 1 if true, 0 if false
Not equalβ Comparison: 1 if true, 0 if false
Orβ¨Logic: 0 if A and B are 0; 1 otherwise
Andβ§Logic: 1 if A and B are 1; 0 otherwise
Norβ±Logic: 1 if both A and B are 0; otherwise 0
Nandβ²Logic: 0 if both A and B are 1; otherwise 1

## Operators and axis indicator

NameSymbolExampleMeaning (of example)
Reduce (last axis)/+/BSum across B
Reduce (first axis)βΏ+βΏBSum down B
Scan (last axis)\+\BRunning sum across B
Scan (first axis)β+βBRunning sum down B
Inner productβA+.ΓBMatrix product of A and B
Outer productβAβ.ΓBOuter product of A and B

For full detail, see: APL syntax and symbols

## Sample APL Code

Sample APL source code: apl_cgi_script.apl

```#!/usr/local/bin/apl --script --

0 0β΄β')COPY 5 HTML.apl'

β This is an APL CGI script that demonstrates the use of APL for CGI scripting
β It outputs an HTML page like GNU APL's homepage at www.gnu.org.
β

β Variable name conventions:
β
β Variables starting with x, e.g. xB, are strings (simple vectors of
β characters), i.e. 1β‘ β‘xB and 1β‘''β΄β΄β΄xB
β
β Variables starting with y are vectors of character strings,
β i.e. 2β‘ β‘yB and 1β‘''β΄β΄β΄yB
β
β Certain characters in function names have the following meaning:
β
β T - start tag
β E - end tag
β X - attributes

ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ

β disable colored output and avoid APL line wrapping
β
]COLOR OFF
βPWβ1000

βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
β Document variables. Set them to '' so that they are always defined.
β Override them in the document section (after )SAVE) as needed.
β

ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β The content of the HTML page
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ

βββββββββββββββββββββββββββββββββββββββββ
β Return xHTTP_GNU or xHTTP_JSA
β depending on the CGI variable SERVER_NAME
β
βxZβHome;xS
xSββ(ββENV 'SERVER_NAME')[;βIO + 1]
xZβ"192.168.0.110/apl"    β JΓΌrgen's home ?
β(Sβ‘'192.168.0.110')/0    β yes, this script was called by apache
β(Sβ‘'')/0                 β yes, this script called directly
xZβxHTTP_GNU,'/apl'       β no
β

βββββββββββββββββββββββββββββββββββββββββ
β set xTITLE and xDESCRIPTION that go into the HEAD section of the page
β
xTITLEβ'GNU APL'
xDESCRIPTIONβ'Welcome to GNU APL'

βββββββββββββββββββββββββββββββββββββββββ
β some URIs used in the BODY
β
xHTTP_GNUβ"http://www.gnu.org/"
xHTTP_JSAβ"http://192.168.0.110/apl/"
xFTP_GNUβ"ftp://ftp.gnu.org"
xFTP_APLβxFTP_GNU,"/gnu/apl"
xCYGWINβ"www.cygwin.org"
xMIRRORSβ'http://www.gnu.org/prep/ftp.html'

βββββββββββββββββββββββββββββββββββββββββ
β some file names used in the BODY
β
xAPL_VERSIONβ'apl-1.5'
xTARFILEβxAPL_VERSION,  '.tar.gz'
xRPMFILEβxAPL_VERSION,  '-0.i386.rpm'
xSRPMFILEβxAPL_VERSION, '-0.src.rpm'
xDEBFILEβxAPL_VERSION,  '-1_i386.deb'
xSDEBFILEβxAPL_VERSION, '-1.debian.tar.gz'
xAPL_TARβxFTP_GNU, '/', xTARFILE
xMAIL_GNUβ'gnu@gnu.org'
xMAIL_WEBβ'bug-apl@gnu.org'
xMAIL_APLβ'bug-apl@gnu.org'
xMAIL_APL_ARCHIVEβ'http://lists.gnu.org/archive/html/bug-apl/'
xMAIL_APL_SUBSCRIBEβ'https://lists.gnu.org/mailman/listinfo/bug-apl'
xSVN_APLβ'https://savannah.gnu.org/svn/?group=apl'

βββββββββββββββββββββββββββββββββββββββββ
β some features of GNU APL
β
yFEATURESβ           β 'nested arrays and related functions'
yFEATURESβyFEATURES, β 'complex numbers, and'
yFEATURESβyFEATURES, β 'a shared variable interface'
yFEATURESβHTMLβUl yFEATURES

βββββββββββββββββββββββββββββββββββββββββ
β Installation instructios
β
βyZβINSTALL;I1;I2;I3;I4
I1β      'Visit one of the ', xMIRRORS HTMLβA 'GNU mirrors'
I1β  I1, ' and download the tar file <B>', xTARFILE,'</B> in directory'
I1ββ I1, ' <B>apl</B>.'
I2ββ     'Unpack the tar file: <B>tar xzf ', xTARFILE, '</B>'
I3ββ     'Change to the newly created directory: <B>cd ', xAPL_VERSION, '</B>'
I4β      'Read (and follow) the instructions in files <B>INSTALL</B>'
yZββ HTMLβOl I1, I2, I3, I4
β

β βINP acts like a HERE document in bash. The monadic form βINP B
β reads subsequent lines from the input (i.e. the lines below βINP
β if βINP is called in a script) until pattern B is seen. The lines
β read are then returned as the result of βINP.
β
β The dyadic form A βINP B acts like the monadic form βINP B.
β A is either a single string or a nested value of two strings.
β
β Let A1βA2βA if A is a string or else A1βA[1] and A2βA[2] if A is
β a nested 2-element vector containing two strings.
β
β Then every pattern A1 expression A2 is replaced by β expression.
β
β We first give an example of βINP in the style of PHP and another,
β more compact, example further down below.
β
yBODYβ '<?apl' '?>' βINP 'END-OF-βINP'   β php style

<DIV class="c1">
<?apl HTMLβH1[''] xTITLE ?>
<TABLE>
<TR>
<TD> <?apl HTMLβImg[xGNU_PIC, (HTMLβ_alt 'Astrid'), HTMLβ__h_w 122 129] 1 ?>
<TD style="width:20%">
<TD><I> Rho, rho, rho of X<BR>
Always equals 1<BR>
Rho is dimension, rho rho rank.<BR>
APL is fun!</I><BR>
<BR>
<B>Richard M. Stallman</B>, 1969<BR>
</TR>
</TABLE>

<BR><BR><BR>
</DIV>
<DIV class="c2">
<B>GNU APL</B> is a free interpreter for the programming language APL.
<BR><BR>
The APL interpreter is an (almost) complete implementation of
<I><B>ISO standard 13751</B></I> aka.
<I><B>Programming Language APL, Extended.</B></I>
<BR>
<BR>
The APL interpreter has implemented:
<?apl β yFEATURES ?>

In addition, <B>GNU APL</B> can be scripted. For example,
<?apl HTMLβx2y 'APL_demo.html' HTMLβA "<B>this HTML page</B>" ?>
is the output of a CGI script written in APL.
<BR>
<BR>
GNU APL was written and is being maintained by JΓΌrgen Sauermann.
</DIV>
<DIV class="c3">

GNU APL should be available on every
<?apl  xMIRRORS HTMLβA 'GNU mirror' ?>
(in directory <B>apl</B>) and at
<?apl  xFTP_APL HTMLβA xFTP_GNU ?>.

<?apl HTMLβH4[''] 'Normal Installation of GNU APL' ?>
The normal (and fully supported) way to install GNU APL is this:

<?apl β INSTALL ?>

<?apl HTMLβH4[''] 'GNU APL for WINDOWs' ?>

GNU APL compiles under CYGWIN, (see
<?apl  ('http://',xCYGWIN) HTMLβA xCYGWIN ?>),
provided that the necessary libraries are installed. A 32-bit <B>apl.exe</B>

<?apl HTMLβH4[''] 'Subversion (SVN) repository for GNU APL' ?>

You can also check out the latest version of GNU APL from its subversion
repository on Savannah:
<BR>
<BR>
<B>svn co http://svn.savannah.gnu.org/svn/apl/trunk</B>.
<BR>
<BR>
about using Subversion with GNU APL.

<?apl HTMLβH4[''] 'RPMs for GNU APL' ?>

For RPM based GNU/Linux distributions we have created source and binary RPMs.
Look for files <B><?apl xRPMFILE ?></B> (binary RPM for i386) or
<B><?apl xSRPMFILE ?></B> (source RPM). If you encounter a problem with these
RPMs, then please report it, but with a solution, since the maintainer of
GNU APL may use a GNU/Linux distribution with a different package manager.

<?apl HTMLβH4[''] 'Debian packages for GNU APL' ?>

For Debian based GNU/Linux distributions we have created source and binary
packages for Debian. Look for files <B><?apl xDEBFILE ?></B> (binary Debian
package for i386) or <B><?apl xSDEBFILE ?></B> (Debian source package).
If you encounter a problem with these packages, then please report it,
but with a solution, since the maintainer of GNU APL may use a GNU/Linux
distribution with a different package manager.

<?apl HTMLβH4[''] 'GNU APL Binary' ?>

If you just want to quickly give GNU APL a try, and if you are very lucky
then you may be able to start the compiled
GNU APL binary <B>apl</B> in the directory <B>apl</B> rather than
installing the entire packet . The binary MAY run on a 32-bit i686 Ubuntu.
Chances are, however, that it does NOT work, Please DO NOT report any
problems if the binary does not run on your machine. Instead use the standard
installation method above.
<BR><BR>
<B>Note:</B> The program <B>APnnn</B> (a support program for shared variables)
is not provided in binary form, so you should start the <B>apl</B> binary with
command line option --noSV. Note as well that the binary <B>apl</B> will not
be updated with every GNU APL release. Therefore it will contain errors that
</DIV>
<DIV class="c4">
<?apl HTMLβH2[''] 'Reporting Bugs' ?>

GNU APL is made up of more than 75,000 lines of C++ code. In a code of that
size, programming mistakes are inevitable. Even though mistakes are hardly
avoidable, they can be <B>corrected</B> once they are found. In order to
improve the quality of GNU APL, we would like to encourage you to report
errors that you find in GNU APL to
<?apl HTMLβx2y ("mailto:", xMAIL_APL) HTMLβA "<EM>", xMAIL_APL, "</EM>" ?>.
<BR><BR>
The emails that we like the most are those that include a small example of
how to reproduce the fault. You can see all previous postings to this mailing
list at
<?apl HTMLβx2y xMAIL_APL_ARCHIVE HTMLβA "<B>", xMAIL_APL_ARCHIVE,"</B>" ?>
or subscribe to it at
<?apl HTMLβx2y xMAIL_APL_SUBSCRIBE HTMLβA "<B>", xMAIL_APL_SUBSCRIBE,"</B>" ?>
</DIV>
<DIV class="c5">
<?apl HTMLβH2[''] 'Documentation' ?>
We have an <?apl HTMLβx2y 'apl.html' HTMLβA "<B>info manual</B>" ?> for GNU APL.

We are also looking for <B>free</B> documentation on APL in general
(volunteers welcome) that can be published here. A "Quick start" document
for APL is planned but the work has not started yet.
<BR><BR>
The C++ source files for GNU APL are Doxygen documented. You can generate
this documentation by running <B>make DOXY</B> in the top level directory
of the GNU APL package.
</DIV>
<DIV class="c6">
<?apl HTMLβH2[''] 'GNU APL Community' ?>
There is a growing group of people that are using GNU APL and that have made
their own developments related to APL available to the public.
We have created a
<?apl  'Community.html' HTMLβA '<b>GNU APL Community Web page</b>' ?>
that collects <B>links</B> to those developments to avoid that they get lost.
<BR><BR>
<?apl  'Bits_and_Pieces/' HTMLβA '<b>Bits-and-Pieces</b>' ?> directory
where we collect <B>files</B> that contain APL code sniplets, GNU APL
workspaces, and other files that were contributed by the GNU APL Community.
The Bits-and-Pieces directory is the right place for contributions for which
the creation of an own hosting account would be an overkill.

</DIV>

END-OF-βINP

β the text above used an 'escape style' similar to PHP
β (using <?apl ... ?> instead of <?php ... ?>). This style also
β resembles the tagging of HTML.
β
β By calling βINP with different left arguments you can use your
β preferred style, for example the more compact { ... } style
β as shown in the following example:
β
yBODYβyBODY, (,Β¨'{}') βINP 'END-OF-βINP'   β more compact style
<DIV class="c7">
<P>

Please send FSF & GNU inquiries & questions to

{HTMLβx2y ("mailto:", xMAIL_GNU) HTMLβA "<EM>", xMAIL_GNU, "</EM>"}.
There are also
{HTMLβx2y "http://www.gnu.org/home.html#ContactInfo" HTMLβA "other ways to contact"}
the FSF.
<P>
{HTMLβx2y ("mailto:", xMAIL_WEB) HTMLβA "<EM>", xMAIL_WEB, "</EM>"}.
send other questions to
{HTMLβx2y ("mailto:", xMAIL_GNU) HTMLβA "<EM>", xMAIL_GNU, "</EM>"}.
<P>
Copyright (C) 2014 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA  02110,  USA
<P>
Verbatim copying and distribution of this entire article is
permitted in any medium, provided this notice is preserved.<P>
</DIV>
END-OF-βINP

HTMLβemit HTMLβDocument

'<!--'
)VARS

)FNS

)SI
'-->'
)OFF

)WSID APL_CGI
)DUMP```