Partitioned Enclose

From APL Wiki
(Redirected from Partitioned enclose)
Jump to navigation Jump to search
In the APL2 family and many related dialects, indicates Partition.

Partitioned Enclose () is a dyadic function which splits its right argument into differently sized pieces as determined by the left argument. It was introduced by NARS and appears in Dyalog APL and some newer dialects influenced by it.


In the simplest case, and on a vector right argument, the corresponding element in the left argument indicates where divisions begin:

      1 0 1 0 0 0 0⊂'HiEarth'

Non-Boolean left argument

Older dialects restrict the left argument to provide only the above functionality. However, the left argument can be interpreted as a count of how many partitions begin with a particular position:

      2 0 3 0 0 0 0⊂'HiEarth'

Short left argument

The dialects that support this extension also allow omission of trailing zeros, which is useful if the partitioning vector is generated by where's inverse:

      ⍸⍣¯1⊢1 1 3 3 3
2 0 3
      2 0 3⊂'HiEarth'

Long left argument

Additional trailing empty divisions are created by adding an additional division count corresponding to the position beyond the end of the right argument:

      1 0 1 0 0 0 0 1⊂'HiEarth'

Split into lengths

The above extensions allow a simple definition of a split-into-lengths function:

Try it online!

      Split←{⍵ ⊂⍨ ⍸⍣¯1 +\ ¯1↓1,⍺}
      3 3 4 Split 'HowAreYou?'

Extension support

The following table shows which of the extensions to introduced by Dyalog APL 18.0 are supported in various dialects. dzaima/APL doesn't support extended lengths but instead requires a short , assuming the first value is 1. This means it can't drop elements as the original Partitioned Enclose typically does, but also means it can't produce leading or trailing empty partitions.

Languages Non-boolean Left argument length
NARS No =≢⍵
Dyalog APL, April Yes ≤1+≢⍵
dzaima/APL Yes =¯1+≢⍵ (first entry assumed 1)
Kap () Yes =≢⍵

See also

External links



APL built-ins [edit]
Primitive functions
Monadic ConjugateNegateSignumReciprocalMagnitudeExponentialNatural LogarithmFloorCeilingFactorialNotPi TimesRollTypeImaginarySquare Root
Dyadic AddSubtractTimesDivideResiduePowerLogarithmMinimumMaximumBinomialComparison functionsBoolean functions (And, Or, Nand, Nor) ∙ GCDLCMCircularComplexRoot
Structural ShapeReshapeTallyDepthRavelEnlistTableCatenateReverseRotateTransposeRazeMixSplitEncloseNestCut (K)PairLinkPartitioned EnclosePartition
Selection FirstPickTakeDropUniqueIdentitySelectReplicateExpandSet functions (IntersectionUnionWithout) ∙ Bracket indexingIndex
Selector Index generatorGradeIndex OfInterval IndexIndicesDeal
Computational MatchNot MatchMembershipFindNub SieveEncodeDecodeMatrix InverseMatrix DivideFormatExecuteMaterialiseRange
Primitive operators Monadic EachCommuteConstantReplicateExpandReduceWindowed ReduceScanOuter ProductKeyI-BeamSpawnFunction axis
Dyadic BindCompositions (Compose, Reverse Compose, Beside, Withe, Atop, Over) ∙ Inner ProductPowerAtUnderRankDepthVariantStencilCut
Quad names
Arrays Index originMigration levelAtomic vector
Functions Name classCase convertUnicode convert
Operators SearchReplace