From 5ce59b6b1ce1ff6ba7597a64d8a4779d7db43bd0 Mon Sep 17 00:00:00 2001 From: Mischa POSLAWSKY Date: Tue, 3 Mar 2015 21:23:07 +0100 Subject: [PATCH] apl: unified/dyalog key combinations --- apl.inc.pl | 124 ++++++++++++++++++++++++++++++++--------------------- apl.plp | 6 ++- 2 files changed, 81 insertions(+), 49 deletions(-) diff --git a/apl.inc.pl b/apl.inc.pl index 61c759d..388b07d 100644 --- a/apl.inc.pl +++ b/apl.inc.pl @@ -1,62 +1,90 @@ 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"], +["∼\nt", undef, "Not, Tilde\nLogical: ∼1 is 0, ∼0 is 1"], +["⍨\nT"], +["+\n-", "Add\nSum of A and B", "Identity\nNo change to B"], +["−\n_", "Subtract\nA minus B", "Negation\nChanges sign of B"], +["×\n-", "Multiply\nA multiplied by B", "Signum\n¯1 if B<0; 0 if B=0; 1 if B>0"], +["÷\n=", "Divide\nA divided by B", "Reciprocal\n1 divided by B"], +["⋆\np", "Exponentiation\nA raised to the B power", "Exponential\ne to the B power"], +["⍣\nP"], +["○\no", "Circle\nTrigonometric functions of B selected by A\nA=1: sin(B) A=2: cos(B) A=3: tan(B)", "Pi times\nMultiply by π"], +["⍥\nO"], +["?\nq", "Deal\nA distinct integers selected randomly from the first B integers", "Roll\nOne integer selected randomly from the first B integers"], +["∈\ne", "Membership, Epsilon\n1 for elements of A present in B; 0 where not."], +["⍷\nE"], +["⌈\ns", "Maximum, Ceiling\nThe greater value of A or B", "Ceiling\nLeast integer greater than or equal to B"], +["⌊\nd", "Minimum, Floor\nThe smaller value of A or B", "Floor\nGreatest integer less than or equal to B"], +["⍴\nr", "Reshape, Dyadic Rho\nArray of shape A with data B", "Shape, Rho\nNumber of components in each dimension of B"], +["↑\ny", "Take\nSelect the first (or last) A elements of B according to ×A"], +["↓\nu", "Drop\nRemove the first (or last) A elements of B according to ×A"], +["⊥\nb", "Decode\nValue of a polynomial whose coefficients are B at A"], +["⊤\nn", "Encode\nBase-A representation of the value of B"], +["∣\nm", "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"], +["⍀\n.", 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"], +["⌿\n/", undef, "Reduce (first axis)\nSum down B"], +["⍳\ni", "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"], +["⌹\n+", "Matrix divide, Dyadic Quad Divide\nSolution to system of linear equations, multiple regression Ax = B", "Matrix inverse, Monadic Quad Divide\nInverse of matrix B"], +["⌽\n%", "Rotation\nThe elements of B are rotated A positions", "Reversal\nReverse elements of B along last axis"], +["⊖\n&", "Rotation\nThe elements of B are rotated A positions along the first axis", "Reversal\nReverse elements of B along first axis"], +["⍟\n*", "Logarithm\nLogarithm of B to base A", "Logarithm\nNatural logarithm of B"], +["⍋\n\$", undef, "Grade up\nIndices of B which will arrange B in ascending order"], +["⍒\n#", undef, "Grade down\nIndices of B which will arrange B in descending order"], +["⍎\n;", undef, "Execute\nExecute an APL expression"], +["⍕\n'", "Dyadic formatting\nFormat B into a character matrix according to A", "Monadic formatting\nA character representation of B"], +["⍉\n^", "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"], +["¨\n1", "Diaeresis, Double-Dot\nOver each, or perform each separately; B = on these; A = operation to perform or using(e.g. iota)"], +["<\n3", "Less than\nComparison: 1 if true, 0 if false"], +["≤\n4", "Less than or equal\nComparison: 1 if true, 0 if false"], +["=\n5", "Equal\nComparison: 1 if true, 0 if false"], +["≥\n6", "Greater than or equal\nComparison: 1 if true, 0 if false"], +[">\n7", "Greater than\nComparison: 1 if true, 0 if false"], +["≠\n8", "Not equal\nComparison: 1 if true, 0 if false"], +["∨\n9", "Or\nLogic: 0 if A and B are 0; 1 otherwise"], +["∧\n0", "And\nLogic: 1 if A and B are 1; 0 otherwise"], +["⍱\n(", "Nor\nLogic: 1 if both A and B are 0; otherwise 0"], +["⍲\n)", "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"], +["∘.\nj", undef, "Outer product\nOuter product of A and B"], +["⍤\nJ"], # 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"], +["¯\n2", undef, "High minus\nDenotes a negative number"], +["⍝\n,", undef, "Lamp, Comment\nEverything to the right of ⍝ denotes a comment"], +["→\n]", undef, "RightArrow, Branch, GoTo\n→This_Label sends APL execution to This_Label:"], +["←\n[", undef, "Assign, LeftArrow, Set to\nB←A sets values and shape of B to match A"], +["⎕\nl", undef, "Quad"], +["⌷\nL"], +["⍞\n{"], [")", undef, "Hook"], + +["⋄\n`"], +["⌶\n!"], +["⍵\nw"], +["∝\na"], +["_\nf"], +["∆\nh"], +["∇\ng"], +["⍫\n@"], +["'\nk"], +["⊂\nz"], +["⊃\nx"], +["∩\nc"], +["∪\nv"], +["⊢\n\\"], +["⊣\n|"], +["⍬\n}"], +["⍪\n<"], +["⍸\nI"], +["⍙\n>"], +["⍠\n?"], +["≡\n:"], +["≢\n\""], ); diff --git a/apl.plp b/apl.plp index 0e4ddcf..44adb74 100644 --- a/apl.plp +++ b/apl.plp @@ -24,9 +24,10 @@ my @ops = do 'apl.inc.pl'; +
op - input + input meaning
⎈ dihtml monadic dyadic @@ -36,12 +37,15 @@ my @ops = do 'apl.inc.pl'; <: for my $op (@ops) { my ($chr, $monad, $dyad) = @{$op}; + ($chr, my $altkey) = split /\n/, $chr; my $codepoint = ord $chr; my $ascii = $codepoint <= 127; my $info = $glyphs->glyph_info($codepoint); my ($class, $name, $mnem, $html, $string) = @{$info}; + printf '
%s'."\n", $chr, EscapeHTML($name || '?'), $class; printf '%s', @{$_} for ( + [$ascii ? 'l5' : defined $altkey ? 'l4' : 'l3', $altkey], [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"], -- 2.30.0