DYNA25: Spring Edition is taking place on 7 April in New York City. More info

APL Will Change the Way You .

Dyalog delivers a world-class APL development environment that allows both Subject Matter Experts and IT specialists to efficiently convert their ideas into software solutions

Adventures in Advent of Code

Join Aaron Hsu and friends as we discuss solutions to problems from the 2023 Advent of Code competition. If you would like to be part of the panel (or simply would prefer to join via Zoom), please email mike@dyalog.com.
in Events

Dyalog '23: Elsinore, 15-19 October 2023

Join us in Elsinore, Denmark, from Sunday 15 to Thursday 19 October 2023 (inclusive) for Dyalog ’23, the annual opportunity for APL users to exchange experience, update their technical knowledge through product training and workshops and influence Dyalog Ltd’s direction through discussions with the Dyalog Development Team.
in Events

2023 APL Problem Solving Competition - Winners Announced

The 15th annual APL Problem Solving Competition winners were announced on 21 August 2023. Read about the experiences of the main prize winners and find out a bit more about them in their own words below.
in Announcements

Latest Updates from Dyalog

You can also stay up to date with Dyalog on these channels:



What is APL and what are its Benefits?

Concise, Expressive, Array-Centric

APL is an array-oriented programming language. Its natural, concise syntax lets you develop shorter programs while thinking more about the problem you’re trying to solve than how to express it to a computer.

APL uses its own character set rather than reserved words written out in English like most other languages, like C or Python. As a language, APL sits at a very high level of abstraction, making it well suited to concise formulations of algorithms.



Dyalog APL is the Modern APL

We continually provid and improve tools and interfaces to integrate Dyalog with the latest technology stacks.

.NET Integration

Take advantage of the .NET ecosystem, all without leaving APL

Python

Combine Python packages with the expressive power of APL – from Python or from APL

SQL Databases

Interface to SQL databases including Oracle, Access, MySQL and DB2

Dyalog Docker Containers

Deploy your apps quickly with our public Docker containers

Curious?

(Lorem ipsum dolor sit amet, consectetur adipiscing elit.)

Let's look at some code...

In the following examples, we’ll explore the elegance and efficiency of APL through various snippets that will introduce you to its unique symbols, array-oriented approach, and how it simplifies complex operations.



Example One

A Lot of Meaning in a Little Package

Representing primitive concepts with symbols facilitates code with high semantic density.

Define a function to compute the mean average of a list of numbers.

The sum of the list (+⌿⍵) divided by (÷) the length of the list (≢⍵).

      Average ←  {(+⌿⍵) ÷ ≢⍵} 
      
      Average 3 1 4 1 5
2.8

Example Two

Who Needs Loops?

In array-oriented programming, functions apply to collections of data of different shapes in similar ways.

Use the same function to compute the average of a list of numbers, or the average of columns in a matrix.

      matrix ← 2 3⍴3 1 4 1 5 9
3 1 4
1 5 9

      Average matrix
2 3 6.5

Example One

Estimate Pi With 10,000 Pairs of Random Points

Each column in points is a random point in a unit quadrant.

Their distances from the origin are the square root (*0.5) of the sum (+⌿) of squares (*2).

Points are inside the quarter circle if their distance to the origin is less than or equal to 1. (This gives 1 for true and 0 for false.)

The count of inside points is the sum (+⌿) of this.

Pi is approximately 4 times the count of inside points to the total number of points.

Pi←{
     points    ← ?2 ⍵⍴0
     distances ← (+⌿points*2)*0.5
     inside    ← distances≤1
     count     ← +⌿inside
     4 × count ÷ ⍵
 }

      Pi 10000
3.1412

Tacit Programming Encourages Functional Thinking

This 3-train, or fork, is equivalent to the function defined in example three.

Syntactic function composition rules mean we don’t have to repeat ourselves by mentioning the argument explicitly.

This implicit reference to arguments is called tacit (or point-free) programming.

      Average ← +⌿ ÷ ≢   
      
      Average 3 1 4 1 5
2.8

APL's Not Just About Numbers

The same 3-train pattern is used here to partition (⊆) the right argument (⊢) where it is not equal to the left argument (≠).

Of course, you don’t have to write your own CSV parser from scratch – Dyalog ships with many tools to simplify application development and system interaction.

      Split ← ≠ ⊆ ⊢
      
      ','Split'comma,delimited,text'
┌─────┬─────────┬────┐
│comma│delimited│text│
└─────┴─────────┴────┘


Apprehensive? Understandable.

(APL isn't like the status quo.)

Dyalog APL is Unique Among Programming Languages

Dyalog has been honed over the last four decades into a robust environment for creating concise, powerful, software solutions

Array Oriented



APL directly manipulates arrays without loops or mapping.

Natural Representation: Most data collected from the real world fits naturally into a list, table or cube.

Highly Performant



Interpreted APL is competitive with compiled code.

But still quick to Iterate: Arrays consume less memory and allow faster iteration than other structures.

Concise Elegance



As in mathematics, symbols remove ambiguity.

The APL Syntax: a blend of symbols and arrays for unparalleled power and elegance.

Reliability



Write now, run forever.

Timeless Solutions: Refactor code when your business requirement changes, not simply when technology changes.

Extensive Integration



A rich ecosystem of tools and interfaces.

Modern Convenience: APL remains modern and relevant through its enduring design.

Enduring Community



Decades of history and experience.

We’ve Been Around the Block: Software engineers and subject matter experts, all happy to share.

Tool of Thought



Explore data in real time to construct solutions.

Algorithm Mining: Interactive environment allows discovery of algorithms through rapid experimentation.

Multi-paradigm



Array-centric core, object-oriented features.

Flexible Solutions: Use the right tool to suit your needs, optimise your workflow effectively.

Team Dyalog

We promote a culture where innovation, fun, pride, and acceptance is part of our everyday life. We come from a variety of backgrounds, and we learn from each other’s diversity.

Rich - Dyalog Team Member
Rich
APL Teacher/Evangelist
Flag of United Kingdom
Jason - Dyalog Team Member
Jason
IT Manager
Flag of United Kingdom
Fiona - Dyalog Team Member
Fiona
Documentation Manager
Flag of United Kingdom
John - Dyalog Team Member
John
Chief Architect
Flag of United Kingdom
Jada - Dyalog Team Member
Jada
Administration Assistant
Flag of United Kingdom
Morten - Dyalog Team Member
Morten
Technical Director (CTO)
Flag of Denmark
Stefan - Dyalog Team Member
Stefan
Developer
Flag of United Kingdom
Karl - Dyalog Team Member
Karl
Developer
Flag of Denmark

Videos

An extensive collection of videos cover all aspects of the language.

Are You a Bacteria? (APL Quest 2021-1)

Are You a Bacteria? (APL Quest 2021-1)

The GC-content of a DNA string is given by the percentage of the symbols in the string that are either ‘C’ or ‘G’. Very small discrepancies in GC-content can be used to distinguish species; for instance, most bacteria have a GC-content signif...View

/

Rise and Fall (APL Quest 2020-9)

Rise and Fall (APL Quest 2020-9)

Write a function that, given a right argument which is an integer scalar or vector, returns a 1 if the values of the right argument conform to the following pattern (0 otherwise): • The elements increase or stay the same until the “apex” (highe...View

/

Zigzag Numbers (APL Quest 2020-8)

Zigzag Numbers (APL Quest 2020-8)

A zigzag number is an integer in which the difference in magnitude of each pair of consecutive digits alternates from positive to negative or negative to positive. Write a function that takes a single integer greater than or equal to 100 and less tha...View

/

Get Support

Technical advice and assistance on all aspects of Dyalog usage is available by e-mail (support@dyalog.com) and/or telephone (+44 1256 830030 – limited to U.K. office hours). Limited advice on design and coding is available, but is not intended to replace the use of the printed and on-line documentation. Except when reporting an issue with the software, users are encouraged to seek advice from the user community via the Dyalog Forum (reading the content of the forums does not require membership).

Search our website...