From APL Wiki
Jump to navigation Jump to search

Disclose () or Reveal is a monadic function in nested APLs which reduces the level of nesting of an array. It may refer to:

  • First, a the function extracting its argument's initial element in ravel order.
  • Mix, a function combining its argument's elements (requiring conforming shapes or padding with fill elements).

These two meanings are distributed among the glyphs Right Shoe () and Up Arrow () in nested APLs; the name "Disclose" is usually used for whichever meaning is represented by and never for the one represented by , which is called "First" or "Mix".

In the SHARP APL family, the behavior of Mix follows automatically by giving Disclose a function rank of 0. Disclose returns the contents of each box in an array, and rank treats these results as the cells of a result array.


Early experiments in array nesting usually defined a primitive to extract the contents of a nested scalar, but did not always specify how it should behave on an array. Jim Brown's "A Generalization of APL"[1] stated that it "may be undefined" on non-scalar arrays. However, all dialects do extend it to non-scalars, either as First or Mix.

STSC's NARS, the first nested APL released, defined Disclose to be First, leaving monadic as Mix, and Dyalog APL followed this choice. But IBM later released APL2 with the definitions the other way around, a choice eventually adopted by the nested APL standard ISO/IEC 13751:2001. Due to the perceived authority of APL2, later dialects such as APLX, NARS2000, and GNU APL generally follow the APL2 definition, and Dyalog as well as STSC's APL*PLUS implement Migration Level to allow programs to select it. However, the NARS definition remains the default in Dyalog, causing it to be adopted by some dialects such as April, dzaima/APL, and ngn/apl.


  1. Jim Brown. "A Generalization of APL" (Ph.D. thesis). 1971.
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