APL+Win v12.3

The APL+Win v12.3 release is available and recommended for all current APL+Win subscribers that have APL+Win v12.x installed.

To download this release, visit and click the file "APL+Win v12.3 Update" using your software download username and password.


The APL+win 12.3 includes the following important changes:

  1. The default button selected in the "Edit sessions have changed; abandon changes?" dialog has changed from OK to Cancel. This dialog appears when exiting APL+Win with any unsaved edit sessions. This change should help prevent losing your work when inadvertently pressing the Enter key.
  2. The default button selected in the "Session exists; create duplicate?" dialog has changed from Yes to No. This dialog appears when starting an edit session while the object is currently open.
  3. The left and top borders in the value tip‘s balloon in the session are now displayed. Also, a gradient background has been added to the value tip balloon.
  4. The APL Keyboard and the Idioms Manager menu items in the View menu in the session are now enabled or disabled depending on whether they are installed or not.
  5. A new argument value of ¯1 has been added to ⎕PW (Page Width system variable). This allows for the programmatic means for setting ⎕PW to match the session window width.

Bug Fixes:

  1. Erasing a share-tied colossal file incorrectly reported the error message FILE TIE ERROR rather than FILE ACCESS ERROR, which is the correct error message.

New Control Structure:

FOREACH control structure statement

      :FOREACH a b c :IN aa bb cc
The name list between the :FOREACH and :IN statement must contain two or more names. The argument value to the right of :IN must be a vector containing the same number of items as the number of names in the name list between the :FOREACH and :IN statements.
The :FOREACH statement behaves similarly to :FOR statement except items are iterated in parallel. In other words, on each iteration in the syntax above, a is assigned the items of aa, b is assigned the items of bb, and c is assigned the items of cc.
Each argument item must be the same shape or a singleton.
For example, if the arguments have the following values:
      aa       ⍝ shape 3
1 2 3
      bb       ⍝ scalar
      cc       ⍝ shape 3
100 200 300
such that the values of (a b c) on each iteration are:
 a   b   c
 1  10 100 
 2  10 200
 3  10 300
    ∇ ForEach;a;b;c;aa;bb;cc
[2]   aa←1 2 3
[3]   bb←10
[4]   cc←100 200 300
[6]   :foreach a b c :in aa bb cc
[7]       ⎕←'a='a  ' b='b  ' c='c
[8]   :endforeach

 a= 1  b= 10  c= 100
 a= 2  b= 10  c= 200
 a= 3  b= 10  c= 300
Please send any questions or comments to