Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
ab6a088
Split the ambivalent system functions into monadic and dyadic pages
abrudz Jul 30, 2026
1d5a167
Make each split page specific to its own form
abrudz Jul 30, 2026
4b87cd1
Finish making each split page specific to its own form
abrudz Jul 30, 2026
53f1183
Point the cross-references at the form that is meant
abrudz Jul 30, 2026
6c1bab9
Add worked examples to four disambiguation pages
abrudz Jul 30, 2026
45778d3
Add worked examples for four more disambiguation pages
abrudz Jul 30, 2026
fd9f0fd
Show only the relevant form in each page's examples
abrudz Jul 30, 2026
e0d7238
Repair links whose target ended with a separator
abrudz Jul 31, 2026
37cc6bb
Space the left argument off the quad in the dyadic titles
abrudz Jul 31, 2026
c2112ab
Repair the prose left behind when examples moved to the sibling page
abrudz Jul 31, 2026
6789bef
Merge branch 'main' into 957-split-ambivalent-sysfns
abrudz Jul 31, 2026
586093e
Give the two ⎕AT pages the detail each was missing
abrudz Aug 3, 2026
3b3f0c4
Polish the ⎕AT pages and give the dyadic page worked examples
abrudz Aug 3, 2026
f1246eb
Point the ⎕LOCK reference at the monadic page
abrudz Aug 3, 2026
1950d78
Correct and tidy the two ⎕C pages
abrudz Aug 3, 2026
8bcc8e9
Lowercase the Sigma text directly rather than round-tripping
abrudz Aug 3, 2026
60015f5
Give dyadic ⎕CLASS an opening line and tidy both pages
abrudz Aug 3, 2026
15f2b43
Lowercase base, class, instance and interface in the ⎕CLASS prose
abrudz Aug 3, 2026
22b5c1a
Make each ⎕CSV page speak only to its own direction
abrudz Aug 3, 2026
4e3d128
Move Internal Format below the argument and result discussions
abrudz Aug 3, 2026
f35e792
Place Internal Format right before MetaCharacters
abrudz Aug 3, 2026
7155fcc
Italicise the emphasis on the ⎕ED pages and complete the dyadic examples
abrudz Aug 3, 2026
820683f
Spell read-only in prose and match the example wording to each form
abrudz Aug 3, 2026
b2a649d
Note the default object type on the ⎕ED pages
abrudz Aug 3, 2026
072849e
Cross-link the two ⎕EXPORT pages and reword the dyadic default
abrudz Aug 3, 2026
8e6f86a
Point the monadic ⎕EXPORT intro at where the type is set
abrudz Aug 3, 2026
bf0083a
Cast the closing ⎕EXPORT notes as Warning and Legacy admonitions
abrudz Aug 3, 2026
3c622df
Give the dyadic ⎕EXPORT warning a set-appropriate example
abrudz Aug 3, 2026
648953f
Separate the two ⎕FCHK forms and tidy the options
abrudz Aug 3, 2026
da21bcf
Add left-argument examples to the dyadic ⎕FCHK page
abrudz Aug 3, 2026
9ea38d4
Tidy the pseudo-component table on both ⎕FCHK pages
abrudz Aug 3, 2026
76067e1
Capitalise the initial of Access matrix
abrudz Aug 3, 2026
ad2de92
Tidy the ⎕FHOLD pages and cross-link the two forms
abrudz Aug 3, 2026
14e1bf5
Rework the two ⎕FIX pages for their own forms and house style
abrudz Aug 4, 2026
a739031
Fix the AllowLateBinding wording and reframe the dyadic Y column
abrudz Aug 4, 2026
b646364
Frame monadic ⎕FRESIZE as compaction and cross-link the two forms
abrudz Aug 4, 2026
e6073ae
Drop the redundant compaction sentence on monadic ⎕FRESIZE
abrudz Aug 4, 2026
4b260ed
Drop the left arguments from the monadic ⎕JSON examples
abrudz Aug 4, 2026
f4c3da8
Reduce monadic ⎕LOCK to its fixed extent and give dyadic an example
abrudz Aug 4, 2026
cc1e039
Confine each ⎕MAP page to the file type it maps
abrudz Aug 4, 2026
00c8484
Drop the italics from APL and raw on the ⎕MAP pages
abrudz Aug 4, 2026
0142228
Drop the zero-length note from monadic ⎕MAP
abrudz Aug 4, 2026
18b32d0
Replace the stray monadic ⎕MAP example with the ∆MPUT copy step
abrudz Aug 4, 2026
1b2cc5d
Fold the file-content line into the ⎕MAP intros
abrudz Aug 4, 2026
d891c15
Mark ⎕MKDIR defaults in text and cross-link the two forms
abrudz Aug 4, 2026
488dec1
Consolidate the Unique material on the ⎕MKDIR pages
abrudz Aug 4, 2026
7d28a4e
Split the ⎕MKDIR result column by argument shape
abrudz Aug 4, 2026
8a2684f
Tidy the ⎕MKDIR examples and links
abrudz Aug 4, 2026
3fbf90f
Show the path in the ⎕MKDIR error message
abrudz Aug 4, 2026
4044fbd
Rework the ⎕NA pages and restore their examples
abrudz Aug 4, 2026
c65d7d6
Code the FindWindow null pointer as P, matching the example
abrudz Aug 4, 2026
4c7d20d
Remove the empty More Examples stub from dyadic ⎕NA
abrudz Aug 4, 2026
1fa6b7b
Tidy the ⎕NDELETE pages and cross-link the forms
abrudz Aug 4, 2026
4318473
Cross-link the ⎕NGET forms and correct the file-argument reference
abrudz Aug 4, 2026
4003b2a
Reduce monadic ⎕NINFO to the name it returns
abrudz Aug 5, 2026
7c01097
Mark the ⎕NINFO variant defaults in text on both pages
abrudz Aug 5, 2026
8b12e94
Link dyadic ⎕NINFO back to monadic and name ⎕NPARTS in the link
abrudz Aug 5, 2026
560cd5b
Set the ⎕NINFO wildcard and directory names as code
abrudz Aug 5, 2026
05cfced
Reword the dyadic ⎕UCS domain-error sentence to name the triggering case
abrudz Aug 6, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ Thread switching will not occur between lines of code after a function has been

## Error Trapping

Compiled functions cannot be suspended. Errors occurring within compiled functions are signalled back to the calling environment (in the same way as if [`⎕SIGNAL`](../../../language-reference-guide/system-functions/signal) had been used inside the function).
Compiled functions cannot be suspended. Errors occurring within compiled functions are signalled back to the calling environment (in the same way as if [`⎕SIGNAL`](../../../language-reference-guide/system-functions/signal-monadic) had been used inside the function).

Similarly, when an error in a compiled function is handled by an Execute trap, the APL expression specified in the trap will be executed in the calling environment and will not be able to see any of the compiled function's local names.

Expand Down
2 changes: 1 addition & 1 deletion dotnet-interface-guide/docs/apl-source-files.md
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ This is compiled to a Windows executable (**.exe**) using **make.bat** and run f

### Defining Namespaces

At least one namespace must be specified in an APL Source file. Namespaces are specified in an APL Source file using the `:Namespace` and `:EndNamespace` statements. Although you can use [`⎕NS`](../../language-reference-guide/system-functions/ns/) and [`⎕CS`](../../language-reference-guide/system-functions/cs/) within functions inside an APL Source file, you should not use these system functions outside function bodies; such use is not prevented, but the results will be unpredictable.
At least one namespace must be specified in an APL Source file. Namespaces are specified in an APL Source file using the `:Namespace` and `:EndNamespace` statements. Although you can use [`⎕NS`](../../language-reference-guide/system-functions/ns-dyadic/) and [`⎕CS`](../../language-reference-guide/system-functions/cs/) within functions inside an APL Source file, you should not use these system functions outside function bodies; such use is not prevented, but the results will be unpredictable.

`:Namespace Name` introduces a new namespace relative to the current namespace called `Name`.

Expand Down
10 changes: 5 additions & 5 deletions interface-guide/docs/introduction/concepts.md
Original file line number Diff line number Diff line change
Expand Up @@ -113,10 +113,10 @@ The Dyalog APL GUI is implemented by the following system functions :

|--------------------------------------------------------------|---------------|--------------------------------------------|
|[`⎕DQ`](../../../language-reference-guide/system-functions/dq)|Dequeue |processes user actions, invoking callbacks |
|[`⎕NQ`](../../../language-reference-guide/system-functions/nq)|Enqueue |generates an event under program control |
|[`⎕WC`](../../../language-reference-guide/system-functions/wc)|Create Object |creates new object with specified properties|
|[`⎕WG`](../../../language-reference-guide/system-functions/wg)|Get Properties |gets values of properties from an object |
|[`⎕WN`](../../../language-reference-guide/system-functions/wn)|Object Names |reports names of all children of an object |
|[`⎕WS`](../../../language-reference-guide/system-functions/ws)|Set Properties |sets values of properties for an object |
|[`⎕NQ`](../../../language-reference-guide/system-functions/nq-monadic)|Enqueue |generates an event under program control |
|[`⎕WC`](../../../language-reference-guide/system-functions/wc-dyadic)|Create Object |creates new object with specified properties|
|[`⎕WG`](../../../language-reference-guide/system-functions/wg-dyadic)|Get Properties |gets values of properties from an object |
|[`⎕WN`](../../../language-reference-guide/system-functions/wn-monadic)|Object Names |reports names of all children of an object |
|[`⎕WS`](../../../language-reference-guide/system-functions/ws-dyadic)|Set Properties |sets values of properties for an object |

GUI Objects are a special type of *namespace* and have a name class of 9. They may therefore be managed like any other workspace object. This means that they can be localised in function headers and erased with `⎕EX`. GUI objects are saved with your workspace and reappear when it is loaded or copied.
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ search:
!!! Warning "Warning"
If the right argument to _dyadic execute_ could include user input, then there is a risk to data and systems. To reduce this risk, a system function might be more appropriate than the _dyadic execute_ function. For example:

* use [`⎕VGET`](../system-functions/vget.md) or [`⎕VSET`](../system-functions/vset.md) to get or set the value of one or more variables named within one or more character vectors.
* use [`⎕VFI`](../system-functions/vfi.md), [`⎕JSON`](../system-functions/json.md), or [`⎕CSV`](../system-functions/csv.md) to make numbers in text form into actual numbers.
* use [`⎕VGET`](../system-functions/vget-monadic.md) or [`⎕VSET`](../system-functions/vset-monadic.md) to get or set the value of one or more variables named within one or more character vectors.
* use [`⎕VFI`](../system-functions/vfi-monadic.md), [`⎕JSON`](../system-functions/json-monadic.md), or [`⎕CSV`](../system-functions/csv-monadic.md) to make numbers in text form into actual numbers.
* use [`⎕OR`](../system-functions/or.md) to call a function by name; exact usage depends on valency. For example, in the namespace with the reference `nsRef`:
* niladic – `(nsRef.⎕OR fnName)nsRef.{⍺⍺})⍬`
* monadic – `(nsRef.⎕OR fnName)nsRef.{⍺⍺ ⍵}Y`
Expand Down
4 changes: 2 additions & 2 deletions language-reference-guide/docs/primitive-functions/execute.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ search:
!!! Warning "Warning"
If the argument to _execute_ could include user input, then there is a risk to data and systems. To reduce this risk, a system function might be more appropriate than the _execute_ function. For example:

* use [`⎕VGET`](../system-functions/vget.md) or [`⎕VSET`](../system-functions/vset.md) to get or set the value of one or more variables named within one or more character vectors.
* use [`⎕VFI`](../system-functions/vfi.md), [`⎕JSON`](../system-functions/json.md), or [`⎕CSV`](../system-functions/csv.md) to make numbers in text form into actual numbers.
* use [`⎕VGET`](../system-functions/vget-monadic.md) or [`⎕VSET`](../system-functions/vset-monadic.md) to get or set the value of one or more variables named within one or more character vectors.
* use [`⎕VFI`](../system-functions/vfi-monadic.md), [`⎕JSON`](../system-functions/json-monadic.md), or [`⎕CSV`](../system-functions/csv-monadic.md) to make numbers in text form into actual numbers.
* use [`⎕OR`](../system-functions/or.md) to call a function by name; exact usage depends on valency. For example:
* niladic – `(⎕OR fnName){⍺⍺}`
* monadic – `(⎕OR fnName){⍺⍺ ⍵}YY`
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ The result `R` is a multi-line string (that is, a character vector with embedded
The namespace `N` can contain any or all of following callback functions:

- `N.quadNC` – analogous to the system function [`⎕NC`](../../system-functions/nc.md). When applied monadically to an enclosed character vector it returns the detailed nameclass of that name. For example, given the name of a global dfn it returns the value `3.2`.
- `N.quadAT` – analogous to the system function [`⎕AT`](../../system-functions/at.md). When applied monadically to an enclosed character vector it returns a 1 by 4 matrix whose first item is a vector of 3 integers describing (respectively) the result, function valence, and operator valence of the name.
- `N.quadAT` – analogous to the system function [`⎕AT`](../../system-functions/at-monadic.md). When applied monadically to an enclosed character vector it returns a 1 by 4 matrix whose first item is a vector of 3 integers describing (respectively) the result, function valence, and operator valence of the name.
- `N.getValue` – used to obtain the name of a global constant. When applied monadically to a character vector that is a global constant it returns the enclose of the constant value, otherwise it returns `⍬`.

Each of these callback functions returns information about names that should be guaranteed to exist when the compiled functions are executed. The compiler assumes that the information returned by the callbacks is correct, and generates bytecode accordingly. In the case of `quadNC` and `quadAT`, if the information returned by the callbacks turns out not to be correct when the compiled function is executed, then a runtime error is generated.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ search:

# <span>Disable Component Checksum Validation</span> `{R}←3002⌶Y`{{key}}

Checksums allow component files to be validated and repaired using [`⎕FCHK`](../../system-functions/fchk.md).
Checksums allow component files to be validated and repaired using [`⎕FCHK`](../../system-functions/fchk-monadic.md).

From Version 13.1 onwards, components which contain checksums are also validated on every component read.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ foo

```

For further details, see [JSON Name Mangling](../../system-functions/json.md).
For further details, see [JSON Name Mangling](../../system-functions/json-monadic.md).

<!-- Hidden search keywords -->
<div style="display: none;">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ The editor may be used to edit Dyalog script files (*.dyalog* files) and general
|4 |Newline |
|5 |Flags |

Encoding, newline and flags are defined the same as for `⎕NGET`. See [File Encodings](../../system-functions/nget.md). Checksum is an 8-character hexadecimal value, see [GetBuildID](../../../../object-reference/methodorevents/getbuildid) for more information.
Encoding, newline and flags are defined the same as for `⎕NGET`. See [File Encodings](../../system-functions/nget-dyadic.md). Checksum is an 8-character hexadecimal value, see [GetBuildID](../../../../object-reference/methodorevents/getbuildid) for more information.

<h2 class="example">Examples</h2>
```apl
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ The rows of the matrix (one row for each shared code file) are ordered to corres

Lists the names in the shared code file identified by the specified memory address.

`Y` is an integer vector that would be a valid right argument to [`⎕NL`](../../../system-functions/nl/); it identifies the nameclasses and subclasses for which the names should be listed.
`Y` is an integer vector that would be a valid right argument to [`⎕NL`](../../../system-functions/nl-monadic/); it identifies the nameclasses and subclasses for which the names should be listed.

`X` is the slot identifier (an integer in the range 1-8) for the unique fixed virtual memory address of the shared code file.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ search:

# <span>Update Function Time and User Stamp</span> `{R}←X(1159⌶)Y`{{key}}

`Y` is an array of function names in the same format as the right argument of `⎕AT`. For further information, see [Attributes](../../system-functions/at.md).
`Y` is an array of function names in the same format as the right argument of `⎕AT`. For further information, see [Attributes](../../system-functions/at-monadic.md).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
`Y` is an array of function names in the same format as the right argument of `⎕AT`. For further information, see [Attributes](../../system-functions/at-monadic.md).
`Y` is an array of function names in the same format as the right argument of [`⎕AT`](../../system-functions/at-monadic.md).


`X` is an array of function attributes in the same format as the output of `⎕AT`.

Expand Down
2 changes: 1 addition & 1 deletion language-reference-guide/docs/system-commands/objects.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

# <span>List Global Namespaces</span> `)OBJECTS {nm}`

This command displays the names of global **namespaces** in the active workspace. Names are displayed in the [`AV`](../system-functions/av.md) collating order. If a name is included after the command, only those names starting at or after the given name in collating order are displayed. Namespaces are objects created using [`⎕NS`](../system-functions/ns.md), [`)NS`](ns.md) or [`⎕WC`](../system-functions/wc.md) and have name class 9.
This command displays the names of global **namespaces** in the active workspace. Names are displayed in the [`AV`](../system-functions/av.md) collating order. If a name is included after the command, only those names starting at or after the given name in collating order are displayed. Namespaces are objects created using [`⎕NS`](../system-functions/ns-dyadic.md), [`)NS`](ns.md) or [`⎕WC`](../system-functions/wc-dyadic.md) and have name class 9.

Note: [`)OBS`](obs.md) can be used as an **alternative** to `)OBJECTS`

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
---
search:
exclude: true
---

# <span>Attributes</span> `⎕AT`

## Monadic `⎕AT` means

[Object Attributes](at-monadic.md)
```apl
⎕AT 'plus'
1 1 0 2026 7 30 15 20 38 0 0 Pete
```

## Dyadic `⎕AT` means

[Object Attributes for APL2](at-dyadic.md)
```apl
1 ⎕AT 'plus'
1 1 0
```
90 changes: 90 additions & 0 deletions language-reference-guide/docs/system-functions/at-dyadic.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
---
search:
boost: 2
---

# <span>Object Attributes for APL2</span> `R←X ⎕AT Y`{{key}}

`Y` can be a simple character scalar, vector or matrix, or a vector of character vectors representing the names of 0 or more defined functions or operators. This function closely emulates the APL2 implementation; for the form that returns information more appropriate to Dyalog APL, see [Object Attributes](at-monadic.md).

`Y` specifies one or more names. If `Y` specifies a single name as a character scalar, a character vector, or as a scalar enclosed character vector, the result `R` is a vector. If `Y` specifies one or more names as a character matrix or as a vector of character vectors `R` is a matrix with one row per name in `Y`.

It returns the same rank and shape result containing information that matches the APL2 implementation as closely as possible.

The number of elements or columns in `R` and their meaning depends upon the value of `X` which may be 1, 2, 3 or 4.

If `X` is 1, `R` specifies _valences_ and contains 3 elements (or columns) whose meaning is as follows:

|---|----------------|---------------------------------------------------------------------------------------------------------------------------------------|
|1 |Explicit result |1 if the object has an explicit result or is a variable 0 otherwise |
|2 |Function valence|0 if the object is a niladic function or not a function 1 if the object is a monadic function 2 if the object is an ambivalent function|
|3 |Operator valence|0 if the object is not an operator 1 if the object is a monadic operator 2 if the object is a dyadic operator |

<h4 class="example">Examples</h4>

The following values correspond to the syntax shown alongside:

|-----|--------|
| `0 0 0` | `∇ FOO` |
| `1 0 0` | `∇ Z←FOO` |
| `1 0 0` | `∇ {Z}←FOO` |
| `0 2 0` | `∇ {A} FOO B` |
| `1 1 2` | `∇ {Z}←(F OP G)B` |

If `X` is 2, `R` specifies _fix times_ (the time the object was last updated) for functions and operators named in `Y`. The time is reported as 7 integer elements (or columns) in the same form as `⎕TS`, whose meaning is as follows. The fix time reported for names in `Y` which are not defined functions or operators is 0.

|---|-------------------------------------------|
|1 |Year |
|2 |Month |
|3 |Day |
|4 |Hour |
|5 |Minute |
|6 |Second |
|7 |Milliseconds (this is always reported as 0)|

If `X` is 3, `R` specifies _execution properties_ and contains 4 elements (or columns) whose meaning is as follows:

|---|------------------------|---------------------------------------------------------------------------------------|
|1 |Displayable |0 if the object is displayable 1 if the object is not displayable |
|2 |Suspendable |0 if execution will suspend in the object 1 if execution will not suspend in the object|
|3 |Weak Interrupt behaviour|0 if the object responds to interrupt 1 if the object ignores interrupt |
|4 |&nbsp; |(always 0) |

If `X` is 4, `R` specifies _object size_ and contains 2 elements (or columns) that both report the `⎕SIZE` of the object.

<h2 class="example">Examples</h2>

```apl
∇ {z}←{l}(fn myop)r

[1] ...

∇ z←foo

[1] ...

∇ z←{larg}util rarg

[1] ...

⎕LOCK'foo'

util2←util

1 ⎕AT 'myop' 'foo' 'util' 'util2'
1 2 1
1 0 0
1 2 0
1 2 0

2 ⎕AT'myop' 'foo' 'util' 'util2'
1996 8 2 2 13 56 0
0 0 0 0 0 0 0
1996 3 1 14 12 10 0
1998 8 26 16 16 42 0
```

<!-- Hidden search keywords -->
<div style="display: none;">
⎕AT
</div>
Loading