Language Features: Difference between revisions
m (→Syntax) |
(→Syntax) |
||
(58 intermediate revisions by 2 users not shown) | |||
Line 2: | Line 2: | ||
==Syntax== | ==Syntax== | ||
* [[Strand Assignment]]: <apll>( | * [[Strand Assignment]]: <apll>(A1 A2 ... An)←R</apll> | ||
* [[ | * [[Modified Assignment]]: <apll>Af←R</apll> | ||
* [[Modify Strand Assignment]]: <apll>( | * [[Modify Strand Assignment]]: <apll>(A1 A2 ... An)f←R</apll> | ||
* [[Function/Operator Assignment]]: <apll> | * [[Hyperators]]: <apll>∇ Z←L (LO (LH dhdo RH) RO) R</apll> | ||
* [[Function/Operator/Hyperator Assignment]]: <apll>A←f</apll>, <apll>A←op1</apll>, <apll>A←op2</apll> | |||
* [[Binding Strength]]: How Variables, Functions, Operators, Hyperators and other syntactic elements combine | |||
* [[Sink]]: <apll>←R</apll> | * [[Sink]]: <apll>←R</apll> | ||
* [[Point Notation]]: | * [[Point Notation]]: | ||
** '''Base''' | ** '''Base''' — <apll>16<_b/>10FFFF</apll> is a shorthand for <apll>16⊥1 0 15 15 15 15</apll> and <apll>10<_b/>45v</apll> is a shorthand for <apll>10⊥4 5 31</apll>. | ||
** '''Euler''' | ** '''Euler''' — <apll>2<_x/>3</apll> is a shorthand for 2∙e<sup>3</sup> or <apll>2×(*1)*3</apll> where e is [https://en.wikipedia.org/wiki/E_(mathematical_constant) Euler's Number] (<apll>2.718281828459045...</apll>). | ||
** '''Pi''' | ** '''Pi''' — <apll>2<_pi/>3</apll> is a shorthand for 2∙π<sup>3</sup> or <apll>2×(○1)*3</apll> where π is [https://en.wikipedia.org/wiki/Pi Archimedes' constant] (<apll>3.141592653589793...</apll>). | ||
** '''Gamma''' | ** '''Gamma''' — <apll>2<_g/>3</apll> is a shorthand for 2∙γ<sup>3</sup> where γ is [https://en.wikipedia.org/wiki/Euler%E2%80%93Mascheroni_constant Euler-Mascheroni's Constant] (<apll>0.5772156649015329...</apll>). | ||
** ''' | ** '''Zeta''' — <apll>2<_z/>3</apll> is a shorthand for 2∙ζ(3) where ζ(x) is the [https://en.wikipedia.org/wiki/Riemann_zeta_function Riemann Zeta function]. | ||
** '''Rational''' | ** Complex: | ||
** '''Variable-Precision Floating''' | *** <apll>2<_i/>3</apll>, <apll>2<_J/>3</apll> (both equal to <apll>2+3×√¯1</apll>) | ||
*** <apll>2<_ad/>3</apll> (Angle in Degrees) | |||
*** <apll>2<_ar/>3</apll> (Angle in Radians) | |||
*** <apll>2<_au/>3</apll> (Angle in Unit Normalized), or | |||
*** <apll>2<_ah/>3</apll> (Angle in Half Unit Normalized) | |||
** Quaternion: <apll>1<_i/>2<_j/>3<_k/>4</apll> | |||
** Octonion: <apll>1<_i/>2<_j/>3<_k/>4<_l/>5<_ij/>6<_jk/>7<_kl/>8</apll>. | |||
** '''Rational''' — <apll>2<_r/>3</apll> is a shorthand for <apll>2÷3</apll> as a Multiple-Precision Integer/Rational number. | |||
** '''Variable-Precision Floating''' — <apll>2.3<_v/></apll> is a shorthand for <apll>2.3</apll> as a Multiple-Precision Floating Point number. | |||
** '''Ball Arithmetic''' — <apll>2.3<_pom/>1<_E/>¯17</apll> is a shorthand for a Ball whose Midpoint and Radius are <apll>2.3</apll> and <apll>1<_E/>¯17</apll>, respectively. | |||
* [[Trains]]: e.g., <apll>avg←(+⌿ ÷ ≢)</apll> applies the functions to its argument(s) in a particular way (in this case, to compute the average of a numeric scalar or vector). | * [[Trains]]: e.g., <apll>avg←(+⌿ ÷ ≢)</apll> applies the functions to its argument(s) in a particular way (in this case, to compute the average of a numeric scalar or vector). | ||
* [[Anonymous Functions/Operators/Hyperators]]: multi-line grouping of one or more statements all enclosed in braces such as <apll>{(+⌿⍵)÷≢⍵}</apll>. | |||
* [[Anonymous Functions/Operators]]: multi-line grouping of one or more statements all enclosed in braces such as <apll>{(+⌿⍵)÷≢⍵}</apll>. | |||
==Primitive | ==Primitive Functions== | ||
== | {| border="0" cellpadding="5" cellspacing="0" | ||
|'''Name'''|| '''Symbol/Syntax'''||'''Function Valence''' | |||
|- | |||
|[[Array Lookup]]|| <apll>L⍸R</apll> ||dyadic | |||
|- | |||
|[[Condense]]|| <apll><[X] R</apll> ||monadic | |||
|- | |||
|[[Dilate]]|| <apll>>[X] R</apll> ||monadic | |||
|- | |||
|[[Expand]]|| <apll>L\[X] R</apll> ||dyadic | |||
|- | |||
|[[Find]]|| <apll>L⍷R</apll> ||dyadic | |||
|- | |||
|[[Index Generator]]|| <apll>⍳R</apll> ||monadic | |||
|- | |||
|[[Index Of]]|| <apll>L⍳R</apll> ||dyadic | |||
|- | |||
|[[Indexing]]|| <apll>R[L]</apll>, <apll>R[L]←A</apll>, <apll>R[L]f←A</apll>, <apll>L⌷[X] R</apll>, <apll>L⍉R</apll>, <apll>L⊃R</apll> ||dyadic | |||
|- | |||
|[[Indices]]|| <apll>⍸R</apll> ||monadic | |||
|- | |||
|[[Matrix Inverse/Divide]]|| <apll>⌹R</apll>, <apll>L⌹R</apll> ||ambivalent | |||
|- | |||
|[[Mismatch]]|| <apll>L≢R</apll> ||dyadic | |||
|- | |||
|[[Partitioned Enclose]]|| <apll>L⊂[X] R</apll> ||dyadic | |||
|- | |||
|[[Primes]]|| <apll>πR</apll>, <apll>LπR</apll> ||ambivalent | |||
|- | |||
|[[Reshape]]|| <apll>L⍴R</apll> ||dyadic | |||
|- | |||
|[[Root]]|| <apll>√R</apll>, <apll>L√[X] R</apll> ||ambivalent | |||
|- | |||
|[[Sequence]]|| <apll>L..R</apll> ||dyadic | |||
|- | |||
|[[Sets]]|| <apll>L§R</apll>, <apll>L⊆R</apll>, <apll>L⊇R</apll> ||dyadic | |||
|- | |||
|[[Tally]]|| <apll>≢R</apll> ||monadic | |||
|- | |||
|[[Without]]|| <apll>L~R</apll> ||dyadic | |||
|} | |||
where <apll>L</apll> is the Left argument, <apll>R</apll> is the Right argument, and <apll>[X]</apll> is an optional Axis value. | |||
==Primitive Operators== | |||
{| border="0" cellpadding="5" cellspacing="0" | |||
|'''Name'''|| '''Symbol/Syntax'''||'''Derived Function Valence''' | |||
|- | |||
|[[At]]|| <apll>a@b R</apll>, <apll>a@f R</apll>, <apll>{L} f@b R</apll>, <apll>{L} f@g R</apll> ||monadic/ambivalent | |||
|- | |||
|[[Axis]]|| <apll>{L} f[X] R</apll>, <apll>{L} f op1[X] R</apll>, <apll>{L} f op2[X] g R</apll> ||ambivalent | |||
|- | |||
|[[Combinatorial]]|| <apll>a‼ R</apll> ||monadic | |||
|- | |||
|[[Commutator]]|| <apll>{L} f⍫g R</apll> ||ambivalent | |||
|- | |||
|[[Commute-Duplicate|Commute]]|| <apll>L f⍨ R ←→ R f L</apll> ||dyadic | |||
|- | |||
|[[Compose]]|| <apll>{L} f∘g R</apll>, <apll>f∘b R</apll>, <apll>a∘g R</apll> ||ambivalent/monadic | |||
|- | |||
|[[Composition]]|| <apll>{L} f⍥g R</apll> ||ambivalent | |||
|- | |||
|[[Convolution]]|| <apll>L f⍡g R</apll> ||dyadic | |||
|- | |||
|[[Derivative]]|| <apll>{L} f∂[X] R</apll>, <apll>{L} f∂∂[X] R</apll>, etc. ||ambivalent | |||
|- | |||
|[[Determinant Operator|Determinant]]|| <apll>f.g R</apll> ||monadic | |||
|- | |||
|[[Dual]]|| <apll>{L} f⍢g R</apll> || ambivalent | |||
|- | |||
|[[Commute-Duplicate|Duplicate]]|| <apll>f⍨ R ←→ R f R</apll> ||monadic | |||
|- | |||
|[[Integral]]|| <apll>{L} f<_sg/>[X] R</apll> ||ambivalent | |||
|- | |||
|[[Power#Inverses|Inverses]]|| <apll>{L} f⍣¯1 R</apll> ||ambivalent | |||
|- | |||
|[[Compose#Mask|Mask]]|| <apll>L (a∘/) R</apll>, <apll>L (a∘⌿) R</apll>, <apll>L (a∘/[X]) R</apll> ||dyadic | |||
|- | |||
|[[Matrix]]|| <apll>{L} f⌻ R</apll>, <apll>∘⌻ R</apll> ||ambivalent/monadic | |||
|- | |||
|[[Compose#Mesh|Mesh]]|| <apll>L (a∘\) R</apll>, <apll>L (a∘⍀) R</apll>, <apll>L (a∘\[X]) R</apll> ||dyadic | |||
|- | |||
|[[Multisets]]|| <apll>{L} f⍦ R</apll> ||ambivalent | |||
|- | |||
|[[Null]]|| <apll>{L} f⊙ R</apll> ||ambivalent | |||
|- | |||
|[[Power]]|| <apll>{L} f⍣g R</apll>, <apll>{L} f⍣b R</apll> ||ambivalent | |||
|- | |||
|[[Rank/Atop]]|| <apll>{L} f⍤[X] b R</apll>, <apll>{L} f⍤g R</apll> ||ambivalent | |||
|- | |||
|[[Variant]]|| <apll>{L} f⍠b R</apll> ||ambivalent | |||
|} | |||
where <apll>{L}</apll> is an optional Left argument, <apll>R</apll> is the Right argument, <apll>f</apll> and <apll>g</apll> represent Functions, <apll>a</apll> and <apll>b</apll> represent Variables, and <apll>[X]</apll> is an optional Axis value. | |||
==Primitive Hyperators== | |||
{| border="0" cellpadding="5" cellspacing="0" | |||
|'''Name'''|| '''Symbol/Syntax'''||'''Derived Function Valence''' | |||
|- | |||
|[http://www.sudleyplace.com/APL/A%20Transform%20Hyperator%20in%20APL.pdf Transform]|| <apll>f h⍑g R</apll> ||monadic | |||
|} | |||
where <apll>{L}</apll> is an optional Left argument, <apll>R</apll> is the Right argument, <apll>f</apll> and <apll>g</apll> represent Functions, <apll>h</apll> represents a Function/Operator, and <apll>[X]</apll> is an optional Axis value. | |||
Also, see [[Hyperators]]. | |||
==Datatypes== | ==Datatypes== | ||
* [[Infinity]]: <apll>∞</apll> and <apll>¯∞</apll> | * [[Infinity]]: <apll>∞</apll> and <apll>¯∞</apll> | ||
* [[NaN]]: <apll>∅</apll> | |||
* [[APA|Arithmetic Progression Arrays]]: <apll>2 3 4⍴⍳24</apll> | * [[APA|Arithmetic Progression Arrays]]: <apll>2 3 4⍴⍳24</apll> | ||
* [[Unicode|Unicode Characters]] | * [[Unicode|Unicode Characters]] | ||
* [[Array Predicates]] | * [[Array Predicates]] | ||
* [[Rational and VFP Numbers|Rational Numbers]]: <apll>1< | * [[Rational and VFP Numbers|Rational Numbers]]: <apll>1<_r/>3</apll> and <apll>12345<_x/></apll> | ||
* [[Rational and VFP Numbers|Variable-precision Floating Point (VFP) Numbers]]: <apll>1.234< | * [[Rational and VFP Numbers|Variable-precision Floating Point (VFP) Numbers]]: <apll>1.234<_v/></apll> and <apll>12<_v/></apll> | ||
* Complex Numbers: <apll>1< | * [http://www.sudleyplace.com/APL/Hypercomplex%20Numbers%20in%20APL.pdf Complex Numbers]: <apll>1<_i/>2</apll> or <apll>3.4<_i/>5</apll> or <apll>2<_ad/>90</apll> or <apll>22<_ar/>.1</apll> or <apll>20<_au/>.5</apll> | ||
* Quaternion Numbers: <apll>1< | * [http://www.sudleyplace.com/APL/Hypercomplex%20Numbers%20in%20APL.pdf Quaternion Numbers]: <apll>1<_i/>2<_j/>3<_k/>4</apll> | ||
* Octonion Numbers: <apll>1< | * [http://www.sudleyplace.com/APL/Hypercomplex%20Numbers%20in%20APL.pdf Octonion Numbers]: <apll>1<_i/>2<_j/>3<_k/>4<_l/>5<_ij/>6<_jk/>7<_kl/>8</apll> | ||
* [[Ball Arithmetic]]: <apll>2.3<_pom/></apll> is a shorthand for a Ball whose Midpoint and Radius are <apll>2.3</apll> and <apll>2*¯53</apll>, respectively, because the Midpoint (<apll>2.3</apll>) cannot be represented exactly in double-precision floating point format with the standard <apll>53</apll> bits of precision. | |||
==Java Support== | |||
The Java programming language is now supported. You can now write code in Java, and call it from APL. For more details, see [[Java_Support|Java Support]]. | |||
==System Commands== | ==System Commands== |
Latest revision as of 14:50, 8 July 2024
At the moment, the following sections describe only those language features that are New or Enhanced relative to the Extended APL Standard, or that deserve special comment.
Syntax
- Strand Assignment: (A1 A2 ... An)←R
- Modified Assignment: Af←R
- Modify Strand Assignment: (A1 A2 ... An)f←R
- Hyperators: ∇ Z←L (LO (LH dhdo RH) RO) R
- Function/Operator/Hyperator Assignment: A←f, A←op1, A←op2
- Binding Strength: How Variables, Functions, Operators, Hyperators and other syntactic elements combine
- Sink: ←R
- Point Notation:
- Base — 16b10FFFF is a shorthand for 16⊥1 0 15 15 15 15 and 10b45v is a shorthand for 10⊥4 5 31.
- Euler — 2x3 is a shorthand for 2∙e3 or 2×(*1)*3 where e is Euler's Number (2.718281828459045...).
- Pi — 2p3 is a shorthand for 2∙π3 or 2×(○1)*3 where π is Archimedes' constant (3.141592653589793...).
- Gamma — 2g3 is a shorthand for 2∙γ3 where γ is Euler-Mascheroni's Constant (0.5772156649015329...).
- Zeta — 2z3 is a shorthand for 2∙ζ(3) where ζ(x) is the Riemann Zeta function.
- Complex:
- 2i3, 2J3 (both equal to 2+3×√¯1)
- 2ad3 (Angle in Degrees)
- 2ar3 (Angle in Radians)
- 2au3 (Angle in Unit Normalized), or
- 2ah3 (Angle in Half Unit Normalized)
- Quaternion: 1i2j3k4
- Octonion: 1i2j3k4l5ij6jk7kl8.
- Rational — 2r3 is a shorthand for 2÷3 as a Multiple-Precision Integer/Rational number.
- Variable-Precision Floating — 2.3v is a shorthand for 2.3 as a Multiple-Precision Floating Point number.
- Ball Arithmetic — 2.3±1E¯17 is a shorthand for a Ball whose Midpoint and Radius are 2.3 and 1E¯17, respectively.
- Trains: e.g., avg←(+⌿ ÷ ≢) applies the functions to its argument(s) in a particular way (in this case, to compute the average of a numeric scalar or vector).
- Anonymous Functions/Operators/Hyperators: multi-line grouping of one or more statements all enclosed in braces such as {(+⌿⍵)÷≢⍵}.
Primitive Functions
Name | Symbol/Syntax | Function Valence |
Array Lookup | L⍸R | dyadic |
Condense | <[X] R | monadic |
Dilate | >[X] R | monadic |
Expand | L\[X] R | dyadic |
Find | L⍷R | dyadic |
Index Generator | ⍳R | monadic |
Index Of | L⍳R | dyadic |
Indexing | R[L], R[L]←A, R[L]f←A, L⌷[X] R, L⍉R, L⊃R | dyadic |
Indices | ⍸R | monadic |
Matrix Inverse/Divide | ⌹R, L⌹R | ambivalent |
Mismatch | L≢R | dyadic |
Partitioned Enclose | L⊂[X] R | dyadic |
Primes | πR, LπR | ambivalent |
Reshape | L⍴R | dyadic |
Root | √R, L√[X] R | ambivalent |
Sequence | L..R | dyadic |
Sets | L§R, L⊆R, L⊇R | dyadic |
Tally | ≢R | monadic |
Without | L~R | dyadic |
where L is the Left argument, R is the Right argument, and [X] is an optional Axis value.
Primitive Operators
Name | Symbol/Syntax | Derived Function Valence |
At | a@b R, a@f R, {L} f@b R, {L} f@g R | monadic/ambivalent |
Axis | {L} f[X] R, {L} f op1[X] R, {L} f op2[X] g R | ambivalent |
Combinatorial | a‼ R | monadic |
Commutator | {L} f⍫g R | ambivalent |
Commute | L f⍨ R ←→ R f L | dyadic |
Compose | {L} f∘g R, f∘b R, a∘g R | ambivalent/monadic |
Composition | {L} f⍥g R | ambivalent |
Convolution | L f⍡g R | dyadic |
Derivative | {L} f∂[X] R, {L} f∂∂[X] R, etc. | ambivalent |
Determinant | f.g R | monadic |
Dual | {L} f⍢g R | ambivalent |
Duplicate | f⍨ R ←→ R f R | monadic |
Integral | {L} f∫[X] R | ambivalent |
Inverses | {L} f⍣¯1 R | ambivalent |
Mask | L (a∘/) R, L (a∘⌿) R, L (a∘/[X]) R | dyadic |
Matrix | {L} f⌻ R, ∘⌻ R | ambivalent/monadic |
Mesh | L (a∘\) R, L (a∘⍀) R, L (a∘\[X]) R | dyadic |
Multisets | {L} f⍦ R | ambivalent |
Null | {L} f⊙ R | ambivalent |
Power | {L} f⍣g R, {L} f⍣b R | ambivalent |
Rank/Atop | {L} f⍤[X] b R, {L} f⍤g R | ambivalent |
Variant | {L} f⍠b R | ambivalent |
where {L} is an optional Left argument, R is the Right argument, f and g represent Functions, a and b represent Variables, and [X] is an optional Axis value.
Primitive Hyperators
Name | Symbol/Syntax | Derived Function Valence |
Transform | f h⍑g R | monadic |
where {L} is an optional Left argument, R is the Right argument, f and g represent Functions, h represents a Function/Operator, and [X] is an optional Axis value.
Also, see Hyperators.
Datatypes
- Infinity: ∞ and ¯∞
- NaN: ∅
- Arithmetic Progression Arrays: 2 3 4⍴⍳24
- Unicode Characters
- Array Predicates
- Rational Numbers: 1r3 and 12345x
- Variable-precision Floating Point (VFP) Numbers: 1.234v and 12v
- Complex Numbers: 1i2 or 3.4i5 or 2ad90 or 22ar.1 or 20au.5
- Quaternion Numbers: 1i2j3k4
- Octonion Numbers: 1i2j3k4l5ij6jk7kl8
- Ball Arithmetic: 2.3± is a shorthand for a Ball whose Midpoint and Radius are 2.3 and 2*¯53, respectively, because the Midpoint (2.3) cannot be represented exactly in double-precision floating point format with the standard 53 bits of precision.
Java Support
The Java programming language is now supported. You can now write code in Java, and call it from APL. For more details, see Java Support.
System Commands
System Commands provide features to the user of the APL system, separate from actual workspaces, variables or APL operators. These provide such features as accessing files, saving a workspace, and exiting the APL interpreter. The commands are not case sensitive, so )IN and )in do the same thing.
NARS2000 currently has the following system commands:
|
|
System Variables and Functions
System Variables (A value may be assigned to these except for ⎕DM) | |||||||||
---|---|---|---|---|---|---|---|---|---|
⎕ALX | ⎕CT | ⎕DM | ⎕DT | ⎕ELX | ⎕FC | ⎕FEATURE | ⎕FPC | ⎕IC | ⎕IO |
⎕LR | ⎕LX | ⎕PP | ⎕PR | ⎕PW | ⎕RL | ⎕SA | ⎕WSID | ||
Niladic System Functions (a value cannot be assigned to these) | |||||||||
⎕A | ⎕AV | ⎕EM | ⎕ET | ⎕LC | ⎕NNAMES | ⎕NNUMS | ⎕SI | ⎕SYSID | ⎕SYSVER |
⎕T | ⎕TC | ⎕TCBEL | ⎕TCBS | ⎕TCESC | ⎕TCFF | ⎕TCHT | ⎕TCLF | ⎕TCNL | ⎕TCNUL |
⎕TS | ⎕WA | ||||||||
Monadic or dyadic system functions (a value cannot be assigned to these) | |||||||||
⎕AT | ⎕CR | ⎕DC | ⎕DFT | ⎕DL | ⎕DR | ⎕EA | ⎕EC | ⎕ERROR | ⎕ES |
⎕EX | ⎕FMT | ⎕FX | ⎕MF | ⎕NAPPEND | ⎕NC | ⎕NCREATE | ⎕NERASE | ⎕NINFO | ⎕NL |
⎕NLOCK | ⎕NREAD | ⎕NRENAME | ⎕NREPLACE | ⎕NRESIZE | ⎕NSIZE | ⎕NTIE | ⎕NUNTIE | ⎕STOP | ⎕TF |
⎕TRACE | ⎕UCS | ⎕VR | |||||||
Note that quad functions and variables (except for the ⎕A family of functions) are case insensitive |