4,494
edits
No edit summary |
m (Text replacement - "<source" to "<syntaxhighlight") |
||
(3 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
{{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 [[argument|arguments]]. It was first introduced in [[Extended Dyalog APL]], sharing its | {{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 [[argument|arguments]]. It was first introduced in [[Extended Dyalog APL]], sharing its [[glyph]] with [[Commute]], and was adopted in [[Dyalog APL 18.0]] as an alternative to the constant [[dfn]] such as <syntaxhighlight lang=apl inline>{0}</syntaxhighlight>. | ||
== Examples == | == 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 < | 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 <syntaxhighlight lang=apl inline>A⍨</syntaxhighlight> over a constant dfn <syntaxhighlight lang=apl inline>{A}</syntaxhighlight> is that the array <syntaxhighlight lang=apl inline>A</syntaxhighlight> is evaluated only once at definition time, rather than every time the function is called. | ||
=== Trains === | === Trains === | ||
Line 9: | Line 9: | ||
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. | 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. | ||
< | <syntaxhighlight lang=apl> | ||
f0←{(⍺+⍵)*3} ⍝ Converting this function to a train was a mess: | 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) | fx←+*3 ⍝ This does not work; it evaluates to a number (conjugate of exponential of 3) | ||
Line 18: | Line 18: | ||
f5←+*3⍨ ⍝ A solution using Constant | f5←+*3⍨ ⍝ A solution using Constant | ||
</ | </syntaxhighlight>{{Works in|[[Extended Dyalog APL]], [[Dyalog APL 18.0]]}} | ||
=== Other uses === | === Other uses === | ||
Sometimes, one needs a constant function that returns one of the arguments of the outer dfn. Simply writing < | Sometimes, one needs a constant function that returns one of the arguments of the outer dfn. Simply writing <syntaxhighlight lang=apl inline>{⍺}</syntaxhighlight> does not work; <syntaxhighlight lang=apl inline>⍺⍨</syntaxhighlight> does. | ||
< | <syntaxhighlight lang=apl> | ||
1 0 0 1{'⎕'@{⍺}⍵}'AbcD' | 1 0 0 1{'⎕'@{⍺}⍵}'AbcD' | ||
VALUE ERROR | VALUE ERROR | ||
Line 31: | Line 31: | ||
1 0 0 1{'⎕'@(⍺⍨)⍵}'AbcD' | 1 0 0 1{'⎕'@(⍺⍨)⍵}'AbcD' | ||
⎕bc⎕ | ⎕bc⎕ | ||
</ | </syntaxhighlight>{{Works in|[[Extended Dyalog APL]], [[Dyalog APL 18.0]]}} | ||
Using Constant is also cleaner when doing a constant fill. | Using Constant is also cleaner when doing a constant fill. | ||
< | <syntaxhighlight lang=apl> | ||
{1}¨2 3⍴⎕A ⍝ Without Constant | {1}¨2 3⍴⎕A ⍝ Without Constant | ||
1 1 1 | 1 1 1 | ||
Line 42: | Line 42: | ||
1 1 1 | 1 1 1 | ||
1 1 1 | 1 1 1 | ||
</ | </syntaxhighlight>{{Works in|[[Extended Dyalog APL]], [[Dyalog APL 18.0]]}} | ||
== External links == | == External links == | ||
Line 57: | Line 57: | ||
* [https://help.dyalog.com/latest/#Language/Primitive%20Operators/Constant.htm Dyalog] | * [https://help.dyalog.com/latest/#Language/Primitive%20Operators/Constant.htm Dyalog] | ||
* [https://mlochbaum.github.io/BQN/doc/constant.html BQN] | |||
{{APL built-ins}}[[Category:Primitive operators]] | {{APL built-ins}}[[Category:Primitive operators]] |