Function rank: Difference between revisions
Miraheze>Marshall (Link to ACM copy of Introduction to Function Rank) |
Miraheze>Adám Brudzewsky m (Text replacement - "<code>" to "<source lang=apl inline>") |
||
Line 1: | Line 1: | ||
In [[SHARP APL]], [[Rationalized APL]], and [[J]], function rank refers to a built-in property of a function indicating which argument [[Rank|ranks]] it accepts. A function will be applied as though it were given that rank with the [[Rank operator]]. The function rank may also have other observable effects: in [[J]], the ranks of < | In [[SHARP APL]], [[Rationalized APL]], and [[J]], function rank refers to a built-in property of a function indicating which argument [[Rank|ranks]] it accepts. A function will be applied as though it were given that rank with the [[Rank operator]]. The function rank may also have other observable effects: in [[J]], the ranks of <source lang=apl inline>f</code> may be viewed using <source lang=apl inline>f b. 0</code> and another function <source lang=apl inline>g</code> may be given those ranks using <source lang=apl inline>g"f</code> (<source lang=apl inline>"</code> is the Rank operator). Every language with function rank defines [[Close composition|"close" composition operators]] which inherit the rank of their right operand—the [[derived function]] produced by such a composition has ranks derived from that function's ranks. | ||
== History == | == History == | ||
Function rank was first introduced without being given a name in [[SHARP APL]], as a feature of the compositions [[Over|with]] and [[Atop|over]]. New compositions such as < | Function rank was first introduced without being given a name in [[SHARP APL]], as a feature of the compositions [[Over|with]] and [[Atop|over]]. New compositions such as <source lang=apl inline>f⍤g</code> were described as "close in the sense that the expression… is applied individually to each subarray argument of <source lang=apl inline>g</code>".<ref>K.E. Iverson. [https://www.jsoftware.com/papers/satn41.htm "Composition and Enclosure"]. SATN 41, 1981-06-20.</ref> The concept of function rank was formalized, and applied to most primitives, when the [[Rank operator]] was introduced to SHARP version 19.0 in 1987.<ref>Bernecky, Robert. [https://dl.acm.org/citation.cfm?id=55632 "An Introduction to Function Rank"]. APL88 Conference Proceedings. ''ACM SIGAPL Quote Quad'', 18(2), December 1987.</ref> In [[J]] every function, primitive or user-defined, has a function rank. | ||
== Definition and properties == | == Definition and properties == |
Revision as of 09:06, 29 October 2019
In SHARP APL, Rationalized APL, and J, function rank refers to a built-in property of a function indicating which argument ranks it accepts. A function will be applied as though it were given that rank with the Rank operator. The function rank may also have other observable effects: in J, the ranks of <source lang=apl inline>f may be viewed using <source lang=apl inline>f b. 0 and another function <source lang=apl inline>g may be given those ranks using <source lang=apl inline>g"f (<source lang=apl inline>" is the Rank operator). Every language with function rank defines "close" composition operators which inherit the rank of their right operand—the derived function produced by such a composition has ranks derived from that function's ranks.
History
Function rank was first introduced without being given a name in SHARP APL, as a feature of the compositions with and over. New compositions such as <source lang=apl inline>f⍤g were described as "close in the sense that the expression… is applied individually to each subarray argument of <source lang=apl inline>g".[1] The concept of function rank was formalized, and applied to most primitives, when the Rank operator was introduced to SHARP version 19.0 in 1987.[2] In J every function, primitive or user-defined, has a function rank.
Definition and properties
A function with rank applies only to cells of the appropriate rank. In order to operate on those cells it will map over arguments of larger rank as though the Rank operator were applied to it.
As the Rank operator accepts up to three specified ranks in its right argument, a function with a defined function rank has three ranks, one for the argument in the monadic case plus two for the arguments in the dyadic case. These ranks may be infinite, or larger than the maximum rank if there is one, in which case they have no effect on the function's application.
A function's rank is obtained from its definition:
- Ranks of primitive functions are defined by the interpreter.
- The ranks of a derived function are determined by its operands. For most operators they are infinite; for close compositions they are obtained from the right argument, and for functions derived from the Rank operator they are obtained from the right operand.
- The ranks of a user-defined function are infinite.
It is not possible to modify the ranks of a function. Instead, apply the Rank operator to create a new function which has the given rank, but functions like the left operand on arrays of that rank. Notably, given a function is defined with a particular rank, it is impossible to make it work on arrays of a higher rank. Applying Rank with larger numbers will produce a function whose rank is higher, but the function's results will be no different: the inner function will still map over cells because it retains its rank.
References
- ↑ K.E. Iverson. "Composition and Enclosure". SATN 41, 1981-06-20.
- ↑ Bernecky, Robert. "An Introduction to Function Rank". APL88 Conference Proceedings. ACM SIGAPL Quote Quad, 18(2), December 1987.