Migration level

From APL Wiki
Jump to navigation Jump to search
⎕ML ⎕EL

Migration level (⎕ML, ⎕EL) or Evolution level is a number that, in Dyalog APL and APL+Win respectively, determines exact where the original NARS specification and the current APL2 implementation differ. A lower value represents a behaviour closer to NARS, while a higher the value represents a behaviour closer to APL2.

APL+Win settings

[TBD]

Dyalog settings

Dyalog APL currently offers the following settings:

⎕ML=0 ZR Monadic is interpreted as Type rather than Enlist.
⎕ML=1 Default behaviour
⎕ML2 ZR Monadic is interpreted as First rather than Mix.
ZR Monadic is interpreted as Mix rather than First.
ZR Monadic returns a positive rather than a negative value, if its argument has non-uniform depth.
⎕ML=3 RX[K]Y Dyadic is interpreted as Partition () rather than Partitioned Enclose.
⎕TC The order of the elements of ⎕TC is the same as in APL2.

Work-arounds

When migrating to Dyalog APL, the below drop-ins for the affected built-ins allow setting ⎕ML1 while preserving code behaviour. It is then safe to programmatically (as shown in the rightmost column) change all occurrences of the affected built-ins with their respective covers.

Migrating from Define Then run this on all code
⎕ML=0
Epsilon{×⎕NC'⍺':⍺  0⍴⊂}
'''[^'']+''' '∊'⎕R'&' 'Epsilon'
⎕ML=2
UpArrow{×⎕NC'⍺':⍺  }
RightShoe{×⎕NC'⍺':⍺  }
EqualUnderbar|≡
'''[^'']+''' '↑' '⊃' '≡'⎕R'&' 'UpArrow' 'RightShoe' 'EqualUnderbar'
⎕ML=3
UpArrow{×⎕NC'⍺':⍺  }
RightShoe{×⎕NC'⍺':⍺  }
EqualUnderbar(|≡)
LeftShoe{×⎕NC'⍺':⍺  }
quadTC(⎕UCS 8 13 10)
'''[^'']+''' '↑' '⊃' '≡' '⊂' '⎕TC'⎕R'&' 'UpArrow' 'RightShoe' 'EqualUnderbar' 'LeftShoe' ' quadTC'

Alternatively, the definitions can be used directly inside the text substitutions, whereby one avoids polluting existing code with these cover names.

External links

Documentation


APL built-ins [edit]
Primitive functions
Scalar
Monadic ConjugateNotRollType
Dyadic AddSubtractEqual to (Xnor) ∙ Not Equal to (Xor)
Non-Scalar
Structural ShapeReshapeTallyDepthRavelReverseRazeMixCut (K)
Selection TakeDropUniqueIdentity
Selector Interval Index
Computational MatchNot MatchNub Sieve
Primitive operators Each
Quad names
Arrays Index originMigration level
Functions
Operators
Other ZildeHigh minusFunction axis