INTERNAL NOTE: LINKS ON THIS PAGE WILL NEED TO BE UPDATED WHEN DYALOG V20.0 IS RELEASED AS THE ONLINE DOCUMENTATION URLS WILL ALL CHANGE
Since its inception, Dyalog APL has been enhanced in ways that might be new to you if you are familiar with a different flavour of APL. This page highlights some of the more significant functionality that has been included in Dyalog APL but is not present in all of the following four APL systems: APL+Win, APL2, APLX, and GNU APL. In addition:
- Release-specific highlights for Dyalog versions since Dyalog v14.0 (released in June 2014) describe some of the more significant changes in each release.
- The 2009 video Dyalog APL for other APL users by APLTrainer showcases various features of Dyalog APL and the Dyalog interpreter. Although there have been many other changes since then, this is a useful summary of differences to that point.
General Language Features
Several tutorials and documentation pages describe the behaviour of various language constructs in Dyalog APL:
- Assignment syntax has several extended features
- Control structures are a structured programming alternative to branching
- Migration level (⎕ML, also known as Evolution Level or Compatibility Setting in other APLs) selects compatibility with APL2/APL+Win/APLX/Gnu APL
- User-defined operators
- Error trapping with control structures can be more ergonomic than (the also supported) ⎕TRAP
- Shyness suppresses printed output of some functions in the session
- Nested arguments and results in tradfn headers
- Total array ordering (grading and sorting arbitrary arrays)
- Complex numbers
Object-oriented Features
Dyalog APL supports object-oriented programming (OOP); the Dyalog APL implementation will be very familiar to anyone who knows OOP in C# or Java.
Documentation and tutorials for key aspects are include:
Primitive Functions and Operators
The basic APL building blocks have been expanded to cover often-requested functionality.
Terminology sheet: all primitive functions and operators in Dyalog APL
Primitive functions:
- Greatest Common Divisor (
∨
) and Lowest Common Multiple (∧
) extend logical OR and AND to useful number theoretic functions - Right tack (
⊢
) and Left tack (⊣
) are simple but versatile identity functions - Materialise (
⌷
) gets the default property of a class instance, and decomposes .NET and COM collections - Tally (
≢
) gives the length of the leading axis as a scalar - Unique mask (nub sieve) (
≠
) indicates the first occurrence of each unique major cell - Where (
⍸
) is a primitive of the very familiar/⍳⍴
idiom, extended to higher rank arrays and non-negative integer values - Interval index (
⍸
) efficiently determines into which “buckets” values fall - Nest (enclose-if-simple) and Partition (
⊆
) for APL-2 style partitioning
Primitive operators:
- Power (
⍣
) iterates a fixed number of times or until a condition is true - Commute (
⍨
) simplifies many expressions - Constant (
⍨
) turns any value into a function - At (
@
) is a way to amend elements of an array in-place without side effects - Bind (
∘
) (curry) an argument to a dyadic function, producing a monadic function - Beside (
∘
) is basic function composition:X f∘g Y ←→ X f g Y
- Over (
⍥
) is a common function composition:X f⍥g Y ←→ (g X) f g Y
- Behind (
⍛
) expresses common patterns:X f⍛g Y ←→ (f X)g Y
andf⍛g Y ←→ (f Y)g Y
- Atop (
⍤
) is a common function composition:X f⍤g Y ←→ f X g Y
- Rank (
⍤
) applies functions to sub-arrays of a certain rank - Key (
⌸
) makes it easy to do things like group-by from SQL and other database systems - Stencil (
⌺
) makes it easy to do stencil code for simulations, image processing, cellular automata, and more - Variant (
⍠
) supplies extra parameters to system functions - Spawn (
&
) provides simple access to parallel threads
System Functions
Many new system functions have been added to Dyalog:
⎕FR
– access to high-precision (128-bit decimal) numbers⎕CSV
,⎕DT
,⎕JSON
,⎕MAP
,⎕XML
– interfaces to external data⎕R
,⎕S
– Perl compatible regular expression integration⎕USING
– access to .NET namespaces⎕ATX
– information (usage, history, restrictions, role, origin) about any name⎕NEW
,⎕NS
– object oriented programming⎕MKDIR
,⎕NEXISTS
,⎕NINFO
,⎕NPARTS
– file system access⎕NCOPY
,⎕NDELETE
,⎕NMOVE
– file handling without needing file ties⎕NGET
,⎕NPUT
– read and write Unicode text files without needing file ties or manual encoding⎕TID
,⎕TSYNC
– concurrency (to be used with&
)⎕ALLOC
,⎕TGET
,⎕TPUT
– synchronisation tokens⎕DMX
,⎕SIGNAL
– advanced error handling⎕VGET
,⎕VSET
– programmatic variable handling
Dfns (Lambdas)
A dfn is an alternative way to define a function or operator with a lightweight, optionally inline, notation.
- Introduction
- Details
- Operators
- The dfns workspace (collection of categorised utilities with extensive comments and notes)
Tacit programming
Tacit programming, also called point-free style, refers to usage of functions that are defined in terms of implicit arguments. This is in contrast to the explicit use of arguments in dfns and tradfns (“defined functions”).
- Documentation: Function Trains
- Documentation: Function composition
- Short video: How to read trains in Dyalog APL code
- Long video: Function trains in APL
- Webinar: Train Spotting in Dyalog APL
- APL Cultivation lesson
Array Notation
Array notation is a way to write almost any array as a single literal, as opposed to constructing it piecemeal using APL primitives and possibly multiple statements:
Documentation <xxx ADD LINK WHEN AVAILABLE xxx>
Video: Fun With Array Notation and Programmatic Variable Assignment
Migrating to Dyalog APL?
There are some tools and resources that can help you to migrate to Dyalog APL.
- The APLX migration tools repository contains utilities and useful information for the migration of code from APLX to Dyalog. For more information, see the APLX Archive.
- The
]TRANSFER.In
user command imports files in APL Transfer Format (.ATF) that are created by other APL systems. See]In -?
for more information.
If you are considering migrating to Dyalog from a different APL, we can offer advice and support as well as putting you in contact with experienced migration consultants.