Prefix and suffix vectors

From APL Wiki
Revision as of 01:59, 8 March 2024 by Marshall (talk | contribs) (Text replacement - "Direct definition (Iverson)" to "Direct definition (notation)")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

In Iverson notation, the prefix vector and suffix vector of weight and length are Boolean vectors that can be used with Compress to select a prefix or suffix of a vector, a task now performed with Take. Primitives and based on this notation were defined in IVSYS/7090 and APL\360, but removed from APL\360 before its public release in 1968.

The prefix vector is defined to be the length- vector where the first elements (or , if smaller) are 1 and the rest are 0. Likewise, the suffix vector has that many 1s at the end. In 1-indexed APL, N⍺J was defined to be J≥⍳N and N⍵J to be (1+N-J)≤⍳N. Because Iverson notation allows the length of a vector to be inferred from context, the first elements of vector can be taken with , and similarly and take the first columns or rows of a matrix. In APL, what is now J↑V (for J≥0 and J≤N) was written ((⍴V)⍺J)/V, and (-J)↑V was ((⍴V)⍵J)/V (although most likely the shape ⍴V would have been saved elsewhere in the program rather than being written out). An instance of Drop such as J↓V was written (~(⍴V)⍺J)/V.

The prefix and suffix vectors were considered two out of a class of "special vectors", with the others being the interval vector , now , and the "full vector" of all 1s and "unit vector" , where the value at index is set to 1. However, was also used for Membership (the "characteristic vector"), which is closely related in that is (⍳N)∊J; only this meaning was defined in APL. The glyphs and came to be used as argument names in direct definition and later dfns.

Very little has been rendered obsolete in the course of this. One thing that has been, and gave us some pain, (I don’t know if it gives you any pain) and that was the removal of the alpha and omega from the list of operators; but I don’t think the released systems had those, so you never missed them. We had them and it was a bit of a jar to lose them. But they are gone now.

Adin Falkoff[1]


APL built-ins [edit]
Primitives (Timeline) Functions
Monadic ConjugateNegateSignumReciprocalMagnitudeExponentialNatural LogarithmFloorCeilingFactorialNotPi TimesRollTypeImaginarySquare Root
Dyadic AddSubtractTimesDivideResiduePowerLogarithmMinimumMaximumBinomialComparison functionsBoolean functions (And, Or, Nand, Nor) ∙ GCDLCMCircularComplexRoot
Structural ShapeReshapeTallyDepthRavelEnlistTableCatenateReverseRotateTransposeRazeMixSplitEncloseNestCut (K)PairLinkPartitioned EnclosePartition
Selection FirstPickTakeDropUniqueIdentityStopSelectReplicateExpandSet functions (IntersectionUnionWithout) ∙ Bracket indexingIndexCartesian ProductSort
Selector Index generatorGradeIndex OfInterval IndexIndicesDealPrefix and suffix vectors
Computational MatchNot MatchMembershipFindNub SieveEncodeDecodeMatrix InverseMatrix DivideFormatExecuteMaterialiseRange
Operators Monadic EachCommuteConstantReplicateExpandReduceWindowed ReduceScanOuter ProductKeyI-BeamSpawnFunction axis
Dyadic BindCompositions (Compose, Reverse Compose, Beside, Withe, Atop, Over) ∙ Inner ProductDeterminantPowerAtUnderRankDepthVariantStencilCutDirect definition (operator)
Quad names Index originComparison toleranceMigration levelAtomic vector