Complex (function)

From APL Wiki
Jump to navigation Jump to search

Complex () is a dyadic scalar function which combines its arguments into a complex number having with the left argument as real part and the right argument as imaginary part. It was added to J as j. together with initial support for complex numbers, and was adopted in Extended Dyalog APL using the glyph because it was seen as a type of numerical composition () for the circular () domain. Complex shares its glyph with Imaginary which is equivalent to applying Complex with a left argument of 0.


The question of whether to include this function is one of Roger Hui's 50 exercises in APL language design:[1]

Complex numbers can be constructed as ordered pairs of real numbers, similar to how integers can be constructed as ordered pairs of natural numbers and rational numbers as ordered pairs of integers. For complex numbers, j. plays the same role as - for integers and ÷ for rational numbers.

In a later blog post, Hui quoted Adám Brudzewsky:[2]

(…) I’d probably go for because:

  • it is more clearly related to (for which the monadic form is also a simple multiplication)
  • it consists of two overstruck basic APL symbols
  • it looks more harmonic (in my eyes)

Oh, and Euler’s formula turns out beautiful (to my taste) with it:

0 = 1+*1
0 = 1+*○1

Hui continues:

On further reflection, I like the symbol for j{0 +0j1×}. If there are existing interpretation of it this one should predominate, if the function is as important as I think it is. (Peer to - and ÷, etc.)

Moreover, complex numbers are commonly represented by magnitude and phase. So if you have a magnitude and phase, how do you get the number so represented? Why k{1 ×*0j1×} (or {1 ×*}) of course. And what symbol would you use? (Monadic , with a default magnitude of 1, gets you a point on the unit circle.)


Try it online!

      ¯2 9 5  3 ¯4 6
¯2J3 9J¯4 5J6



  1. Roger Hui. Some Exercises in APL Language Design. §8 Imaginary/Complex and sample answer. Jsoftware. 2016.
  2. Roger Hui. ⊕ and ⊗. Dyalog Forums. 2021-06-13.
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 (J)
Quad names
Arrays Index originMigration levelAtomic vector
Functions Name classCase convertUnicode convert
Operators SearchReplace