apl: page to list common APL symbols and meanings
authorMischa POSLAWSKY <perl@shiar.org>
Tue, 3 Mar 2015 18:44:40 +0000 (19:44 +0100)
committerMischa POSLAWSKY <perl@shiar.org>
Tue, 9 Jun 2015 03:43:43 +0000 (05:43 +0200)
Basic inventory copied from
<http://en.wikipedia.org?title=APL_syntax_and_symbols&oldid=649671767>.

apl.inc.pl [new file with mode: 0644]
apl.plp [new file with mode: 0644]

diff --git a/apl.inc.pl b/apl.inc.pl
new file mode 100644 (file)
index 0000000..61c759d
--- /dev/null
@@ -0,0 +1,62 @@
+use utf8;
+(
+# monadic
+["∼", undef, "Not, Tilde\nLogical: ∼1 is 0, ∼0 is 1"],
+
+# dyadic, monadic
+["+", "Add\nSum of A and B", "Identity\nNo change to B"],
+["−", "Subtract\nA minus B", "Negation\nChanges sign of B"],
+["×", "Multiply\nA multiplied by B", "Signum\n¯1 if B<0; 0 if B=0; 1 if B>0"],
+["÷", "Divide\nA divided by B", "Reciprocal\n1 divided by B"],
+["⋆", "Exponentiation\nA raised to the B power", "Exponential\ne to the B power"],
+["○", "Circle\nTrigonometric functions of B selected by A\nA=1: sin(B) A=2: cos(B) A=3: tan(B)", "Pi times\nMultiply by π"],
+["?", "Deal\nA distinct integers selected randomly from the first B integers", "Roll\nOne integer selected randomly from the first B integers"],
+["∈", "Membership, Epsilon\n1 for elements of A present in B; 0 where not."],
+["⌈", "Maximum, Ceiling\nThe greater value of A or B", "Ceiling\nLeast integer greater than or equal to B"],
+["⌊", "Minimum, Floor\nThe smaller value of A or B", "Floor\nGreatest integer less than or equal to B"],
+["⍴", "Reshape, Dyadic Rho\nArray of shape A with data B", "Shape, Rho\nNumber of components in each dimension of B"],
+["↑", "Take\nSelect the first (or last) A elements of B according to ×A"],
+["↓", "Drop\nRemove the first (or last) A elements of B according to ×A"],
+["⊥", "Decode\nValue of a polynomial whose coefficients are B at A"],
+["⊤", "Encode\nBase-A representation of the value of B"],
+["∣", "Residue\nB modulo A", "Absolute value\nMagnitude of B"],
+[",", "Catenation\nElements of B appended to the elements of A", "Ravel, Catenate, Laminate\nReshapes B into a vector"],
+["\\","Expansion, Dyadic Backslash\nInsert zeros (or blanks) in B corresponding to zeros in A", "Scan (last axis), Backslash\nRunning sum across B"],
+["⍀", undef, "Scan (first axis)\nRunning sum down B"],
+["/", "Compression, Dyadic Slash\nSelect elements in B corresponding to ones in A", "Reduce (last axis), Slash\nSum across B"],
+["⌿", undef, "Reduce (first axis)\nSum down B"],
+["⍳", "Index of, Dyadic Iota\nThe location (index) of B in A; 1+⌈/⍳⍴A if not found", "Index generator, Iota\nVector of the first B integers"],
+["⌹", "Matrix divide, Dyadic Quad Divide\nSolution to system of linear equations, multiple regression Ax = B", "Matrix inverse, Monadic Quad Divide\nInverse of matrix B"],
+["⌽", "Rotation\nThe elements of B are rotated A positions", "Reversal\nReverse elements of B along last axis"],
+["⊖", "Rotation\nThe elements of B are rotated A positions along the first axis", "Reversal\nReverse elements of B along first axis"],
+["⍟", "Logarithm\nLogarithm of B to base A", "Logarithm\nNatural logarithm of B"],
+["⍋", undef, "Grade up\nIndices of B which will arrange B in ascending order"],
+["⍒", undef, "Grade down\nIndices of B which will arrange B in descending order"],
+["⍎", undef, "Execute\nExecute an APL expression"],
+["⍕", "Dyadic formatting\nFormat B into a character matrix according to A", "Monadic formatting\nA character representation of B"],
+["⍉", "General transpose\nThe axes of B are ordered by A", "Monadic transpose\nReverse the axes of B"],
+["!", "Combinations\nNumber of combinations of B taken A at a time", "Factorial \nProduct of integers 1 to B"],
+["¨", "Diaeresis, Double-Dot\nOver each, or perform each separately; B = on these; A = operation to perform or using(e.g. iota)"],
+["<", "Less than\nComparison: 1 if true, 0 if false"],
+["≤", "Less than or equal\nComparison: 1 if true, 0 if false"],
+["=", "Equal\nComparison: 1 if true, 0 if false"],
+["≥", "Greater than or equal\nComparison: 1 if true, 0 if false"],
+[">", "Greater than\nComparison: 1 if true, 0 if false"],
+["≠", "Not equal\nComparison: 1 if true, 0 if false"],
+["∨", "Or\nLogic: 0 if A and B are 0; 1 otherwise"],
+["∧", "And\nLogic: 1 if A and B are 1; 0 otherwise"],
+["⍱", "Nor\nLogic: 1 if both A and B are 0; otherwise 0"],
+["⍲", "Nand\nLogic: 0 if both A and B are 1; otherwise 1"],
+
+# operators and axis indicator
+[".", undef, "Inner product\nMatrix product of A and B"],
+["∘.", undef, "Outer product\nOuter product of A and B"],
+
+# miscellaneous
+["¯", undef, "High minus\nDenotes a negative number"],
+["⍝", undef, "Lamp, Comment\nEverything to the right of ⍝ denotes a comment"],
+["→", undef, "RightArrow, Branch, GoTo\n→This_Label sends APL execution to This_Label:"],
+["←", undef, "Assign, LeftArrow, Set to\nB←A sets values and shape of B to match A"],
+["⎕", undef, "Quad"],
+[")", undef, "Hook"],
+);
diff --git a/apl.plp b/apl.plp
new file mode 100644 (file)
index 0000000..0e4ddcf
--- /dev/null
+++ b/apl.plp
@@ -0,0 +1,70 @@
+<(common.inc.plp)><:
+
+Html({
+       title => 'APL',
+       version => 'v1.0',
+       description => [
+       ],
+       keywords => [qw'
+       '],
+       stylesheet => [qw'light circus dark red'],
+       data => [qw'apl.inc.pl'],
+});
+
+use Shiar_Sheet::FormatChar;
+my $glyphs = Shiar_Sheet::FormatChar->new;
+
+my @ops = do 'apl.inc.pl';
+@ops > 1 or die "cannot open operator include: $@\n";
+
+:>
+<h1>APL Symbols</h1>
+
+<div class="section">
+<table class="mapped">
+<thead><tr>
+       <td rowspan=2>op
+       <td colspan=2>input
+       <td colspan=2>meaning
+<tr>
+       <td><a href="/digraphs" title="digraph">di</a><td>html
+       <td>monadic
+       <td>dyadic
+</thead>
+
+
+<:
+for my $op (@ops) {
+       my ($chr, $monad, $dyad) = @{$op};
+       my $codepoint = ord $chr;
+       my $ascii = $codepoint <= 127;
+       my $info = $glyphs->glyph_info($codepoint);
+       my ($class, $name, $mnem, $html, $string) = @{$info};
+       printf '<tr><th title="%2$s">%s'."\n", $chr, EscapeHTML($name || '?'), $class;
+       printf '<td class="%s">%s', @{$_} for (
+               [defined $mnem ? $class =~ /\bu-di\b/ ? 'l4' : 'l3' : $ascii ? 'l5' : 'l1',
+                       EscapeHTML($mnem) // sprintf('%s%0*X', $codepoint < 256 ? (x => 2) : (u => 4), $codepoint)],
+               [defined $html ? 'l4' : $ascii ? 'l5' : 'l1', $html // "#$codepoint"],
+       );
+       printf(
+               defined $_ ? '<td title="%2$s">%s' : '<td class="Xi">',
+               map { EscapeHTML($_) } split /\n/, $_, 2
+       ) for $monad, $dyad;
+}
+
+:></table>
+</div>
+
+<hr>
+
+<div class="legend">
+       <table class="glyphs"><tr>
+       <td class="X l5">unicode 1.1
+       <td class="X l4">20th century
+       <td class="X l3">in 6.0 (2010)
+       <td class="X l2">recent assignments
+       <td class="X l1">proposed
+       <td class="ex">irregular
+       </table>
+</div>
+