Factorial (!
) is a monadic scalar function which gives the factorial of a non-negative integer. Factorial takes its glyph <source lang=apl inline>!</syntaxhighlight> from traditional mathematics but, like all monadic functions, takes its argument on the right <source lang=apl inline>!Y</syntaxhighlight> instead of traditional mathematics' . It shares the glyph with the dyadic arithmetic function Binomial.
Examples
The factorial of a positive integer n is defined as the product of 1 to n inclusive.
<source lang=apl>
!0 1 2 3 4
1 1 2 6 24
×/⍳4
24
</syntaxhighlight>
Extended definition
In multiple implementations, this function has an extended definition using the Gamma function , so that it is defined for real and complex numbers. Because equals , <source lang=apl inline>!Y</syntaxhighlight> is defined as .
<source lang=apl>
!¯1.2 0.5 2.7
¯5.821148569 0.8862269255 4.170651784
!2J1 ¯2J¯1
0.962865153J1.339097176 ¯0.1715329199J¯0.3264827482
</syntaxhighlight>
The Gamma function diverges at 0 or negative numbers, so <source lang=apl inline>!Y</syntaxhighlight> is undefined at negative integers.
<source lang=apl>
!¯1
DOMAIN ERROR
!¯1
∧
</syntaxhighlight>
In J, where literal infinity is supported, negative integer factorial evaluates to positive infinity <source lang=j inline>_</syntaxhighlight> (if the argument is odd) or negative infinity <source lang=j inline>__</syntaxhighlight> (if even). This corresponds to the positive-side limit of the Gamma function.
<source lang=j>
!_1 _2 _3 _4
_ __ _ __
</syntaxhighlight>
External links
Documentation
APL built-ins [edit]
|
Primitives (Timeline) |
Functions
|
Scalar
|
Monadic
|
Conjugate ∙ Negate ∙ Signum ∙ Reciprocal ∙ Magnitude ∙ Exponential ∙ Natural Logarithm ∙ Floor ∙ Ceiling ∙ Factorial ∙ Not ∙ Pi Times ∙ Roll ∙ Type ∙ Imaginary ∙ Square Root ∙ Round
|
Dyadic
|
Add ∙ Subtract ∙ Times ∙ Divide ∙ Residue ∙ Power ∙ Logarithm ∙ Minimum ∙ Maximum ∙ Binomial ∙ Comparison functions ∙ Boolean functions (And, Or, Nand, Nor) ∙ GCD ∙ LCM ∙ Circular ∙ Complex ∙ Root
|
Non-Scalar
|
Structural
|
Shape ∙ Reshape ∙ Tally ∙ Depth ∙ Ravel ∙ Enlist ∙ Table ∙ Catenate ∙ Reverse ∙ Rotate ∙ Transpose ∙ Raze ∙ Mix ∙ Split ∙ Enclose ∙ Nest ∙ Cut (K) ∙ Pair ∙ Link ∙ Partitioned Enclose ∙ Partition
|
Selection
|
First ∙ Pick ∙ Take ∙ Drop ∙ Unique ∙ Identity ∙ Stop ∙ Select ∙ Replicate ∙ Expand ∙ Set functions (Intersection ∙ Union ∙ Without) ∙ Bracket indexing ∙ Index ∙ Cartesian Product ∙ Sort
|
Selector
|
Index generator ∙ Grade ∙ Index Of ∙ Interval Index ∙ Indices ∙ Deal ∙ Prefix and suffix vectors
|
Computational
|
Match ∙ Not Match ∙ Membership ∙ Find ∙ Nub Sieve ∙ Encode ∙ Decode ∙ Matrix Inverse ∙ Matrix Divide ∙ Format ∙ Execute ∙ Materialise ∙ Range
|
Operators |
Monadic
|
Each ∙ Commute ∙ Constant ∙ Replicate ∙ Expand ∙ Reduce ∙ Windowed Reduce ∙ Scan ∙ Outer Product ∙ Key ∙ I-Beam ∙ Spawn ∙ Function axis ∙ Identity (Null, Ident)
|
Dyadic
|
Bind ∙ Compositions (Compose, Reverse Compose, Beside, Withe, Atop, Over) ∙ Inner Product ∙ Determinant ∙ Power ∙ At ∙ Under ∙ Rank ∙ Depth ∙ Variant ∙ Stencil ∙ Cut ∙ Direct definition (operator) ∙ Identity (Lev, Dex)
|
Quad names
|
Index origin ∙ Comparison tolerance ∙ Migration level ∙ Atomic vector
|