Constant: Difference between revisions
(Created page with "{{Built-in|Constant|⍨}} is a monadic operator which takes an array as its operand and becomes a function which returns the operand array regardless of its ...") |
(→Trains) |
||
Line 15: | Line 15: | ||
f2←*∘3+ ⍝ A workaround using Bind; ditto | f2←*∘3+ ⍝ A workaround using Bind; ditto | ||
f3←+*{3} ⍝ A workaround using a constant dfn | f3←+*{3} ⍝ A workaround using a constant dfn | ||
f4←+*3⊣⊢ ⍝ A workaround using Identity | |||
f5←+*3⍨ ⍝ A solution using Constant | |||
</source>{{Works in|[[Extended Dyalog APL]], [[Dyalog APL 18.0]]}} | </source>{{Works in|[[Extended Dyalog APL]], [[Dyalog APL 18.0]]}} | ||
Revision as of 11:11, 15 July 2020
⍨
|
Constant (⍨
) is a monadic operator which takes an array as its operand and becomes a function which returns the operand array regardless of its arguments. It was first introduced in Extended Dyalog APL, and was adopted in Dyalog APL 18.0 as an alternative to the constant dfn such as {0}
.
Examples
The need for Constant arises in various contexts, such as at the rightmost branch in a train and mapping over an array to create a constant-filled one. The major advantage of Constant A⍨
over a constant dfn {A}
is that the array A
is evaluated only once at definition time, rather than every time the function is called.
Trains
If the rightmost branch of a train is an array, it is not recognised as a train at all. This problem can be worked around in many ways, but none is visually appealing. The Constant operator gives a natural solution to this problem.
f0←{(⍺+⍵)*3} ⍝ Converting this function to a train was a mess: fx←+*3 ⍝ This does not work; it evaluates to a number (conjugate of exponential of 3) f1←3*⍨+ ⍝ A workaround using Commute; it changes the order of visual tokens f2←*∘3+ ⍝ A workaround using Bind; ditto f3←+*{3} ⍝ A workaround using a constant dfn f4←+*3⊣⊢ ⍝ A workaround using Identity f5←+*3⍨ ⍝ A solution using Constant
Other uses
Sometimes, one needs a constant function that returns one of the arguments of the outer dfn. Simply writing {⍺}
does not work; ⍺⍨
does.
1 0 0 1{'⎕'@{⍺}⍵}'AbcD' VALUE ERROR 1 0 0 1{'⎕'@{⍺}⍵}'AbcD' ∧ 1 0 0 1{'⎕'@(⍺⍨)⍵}'AbcD' ⎕bc⎕
Using Constant is also cleaner when doing a constant fill.
{1}¨2 3⍴⎕A ⍝ Without Constant 1 1 1 1 1 1 1⍨¨2 3⍴⎕A ⍝ With Constant 1 1 1 1 1 1
External links
Webinars
Lessons
Documentation