4,494
edits
m (→History: Dyalog version number) |
m (Text replacement - "</source>" to "</syntaxhighlight>") |
||
(8 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
{{Built-ins|Variant|⍠|⎕OPT}} or '''Custom''' (<code>:</code> in [[A Dictionary of APL]]<ref>[[Ken Iverson]]. [[A Dictionary of APL]]. [https://www.jsoftware.com/papers/APLDictionary1.htm#colon Custom]. [[APL Quote Quad]], Volume 18, Number 1, 1987-09.</ref>) and '''Fit''' in [[J]], is a special [[dyadic operator]] which takes a function as its left [[operand]] and modifies its behaviour as specified by the array right operand. | {{Built-ins|Variant|⍠|⎕OPT}} or '''Custom''' (<code>:</code> in [[A Dictionary of APL]]<ref>[[Ken Iverson]]. [[A Dictionary of APL]]. [https://www.jsoftware.com/papers/APLDictionary1.htm#colon Custom]. [[APL Quote Quad]], Volume 18, Number 1, 1987-09.</ref>) and '''Fit''' in [[J]], is a special [[dyadic operator]] which takes a function as its left [[operand]] and modifies its behaviour as specified by the array right operand. | ||
Since < | Since <syntaxhighlight lang=apl inline>⍠</syntaxhighlight> was not in Dyalog's [[atomic vector]] when the feature was added, a system operator alternative was provided in form of <syntaxhighlight lang=apl inline>⎕OPT</syntaxhighlight>. | ||
== History == | == History == | ||
Variant dates back all the way to [[Iverson notation]] where a subscript was used to indicate which [[index origin]] a [[primitive]] would operate under. This system was dropped in [[APL\360]]. Instead, the [[system command]] < | Variant dates back all the way to [[Iverson notation]] where a subscript was used to indicate which [[index origin]] a [[primitive]] would operate under. This system was dropped in [[APL\360]]. Instead, the [[system command]] <syntaxhighlight lang=apl inline>)ORIGIN</syntaxhighlight> was provided for controlling the interpreter's global setting. This was then supplemented with a [[system variable]] to control the global state. Though this feature is still present in many APL systems, together with numerous other system variables for controlling other aspects of the system, for example [[comparison tolerance]], these global settings were recognised as an unfortunate design in that every programmer would be forced to set and localise every system variable that could affect the given code. Later, [[Ken Iverson]] envisioned a return to a per-invocation setting, similar to the original notation, but this time in the form of a dyadic operator that would customise [[primitive function]]s. | ||
Although [[SHARP APL]] didn't implement Iverson's idea, [[J]] did. Later [[Dyalog APL 13.0]] (2011) repurposed it as a way of providing | Although [[SHARP APL]] didn't implement Iverson's idea, [[J]] did. Later [[Dyalog APL 13.0]] (2011) repurposed it as a way of providing auxiliary arguments to [[primitive function|primitive]] and [[system function]]s, and [[derived function|functions derived]] from [[primitive operator|primitive]] and [[system operator]]s, however its only current use in connection with primitives is to provide language settings for the Format Date-time [[I-beam]] (<syntaxhighlight lang=apl inline>1200⌶</syntaxhighlight>).<ref>[[Dyalog Ltd]]. Language Reference Guide: [https://help.dyalog.com/latest/#Language/I%20Beam%20Functions/Format%20Datetime.htm Format Date-time].</ref> | ||
== Usage | == Usage == | ||
The Dyalog system operator < | The Dyalog system operator <syntaxhighlight lang=apl inline>⎕S</syntaxhighlight> takes as operands text to be searched for, and what to return for each match (with <code>&</code> meaning the matched text): | ||
< | <syntaxhighlight lang=apl> | ||
('abra'⎕S'&')'Abrabrabra' | ('abra'⎕S'&')'Abrabrabra' | ||
abra | abra | ||
</ | </syntaxhighlight>{{Works in|[[Dyalog APL]]}} | ||
Only one match is found, because < | Only one match is found, because <syntaxhighlight lang=apl inline>⎕S</syntaxhighlight> defaults to being case sensitive and disallow overlapping matches. The variant operator can be used to enable case insensitivity: | ||
< | <syntaxhighlight lang=apl> | ||
('abra'⎕S'&'⍠1)'Abrabrabra' | ('abra'⎕S'&'⍠1)'Abrabrabra' | ||
Abra abra | Abra abra | ||
</ | </syntaxhighlight>{{Works in|[[Dyalog APL]]}} | ||
This usage with a [[simple scalar]] right operand is in line with Iverson's design: | This usage with a [[simple scalar]] right operand is in line with Iverson's design: | ||
< | <syntaxhighlight lang=j> | ||
1 = 1+1e_14 NB. equivalent to 1 = 1+1e¯14 in Dictionary APL | 1 = 1+1e_14 NB. equivalent to 1 = 1+1e¯14 in Dictionary APL | ||
1 | 1 | ||
1 (= !. 0) 1+1e_14 NB. equivalent to 1 (= : 0) 1+1e¯14 in Dictionary APL | 1 (= !. 0) 1+1e_14 NB. equivalent to 1 (= : 0) 1+1e¯14 in Dictionary APL | ||
0 | 0 | ||
</ | </syntaxhighlight>{{Works in|[[J]]}} | ||
However, Dyalog also allows a [[wikipedia:name–value pair]], or a vector of name–value pairs. The above example can be spelled using the < | However, Dyalog also allows a [[wikipedia:name–value pair|name–value pair]], or a vector of name–value pairs. The above example can be spelled using the <syntaxhighlight lang=apl inline>IC</syntaxhighlight> (for ''Ignore Case'') setting name: | ||
< | <syntaxhighlight lang=apl> | ||
('abra'⎕S'&'⍠'IC'1)'Abrabrabra' | ('abra'⎕S'&'⍠'IC'1)'Abrabrabra' | ||
Abra abra | Abra abra | ||
</ | </syntaxhighlight>{{Works in|[[Dyalog APL]]}} | ||
Multiple settings can either be specified with multiple applications of variant, or by using a vector of name–value pairs. Here, < | Multiple settings can either be specified with multiple applications of variant, or by using a vector of name–value pairs. Here, <syntaxhighlight lang=apl inline>OM</syntaxhighlight> (for ''Overlapping Matches'') is enabled in addition to <syntaxhighlight lang=apl inline>IC</syntaxhighlight>: | ||
< | <syntaxhighlight lang=apl> | ||
('abra'⎕S'&'⍠'IC'1⍠'OM'1)'Abrabrabra' | ('abra'⎕S'&'⍠'IC'1⍠'OM'1)'Abrabrabra' | ||
Abra abra abra | Abra abra abra | ||
('abra'⎕S'&'⍠('IC'1)('OM'1))'Abrabrabra' | ('abra'⎕S'&'⍠('IC'1)('OM'1))'Abrabrabra' | ||
Abra abra abra | Abra abra abra | ||
</ | </syntaxhighlight>{{Works in|[[Dyalog APL]]}} | ||
== External links == | == External links == | ||
=== Tutorials === | === Tutorials === | ||
Line 44: | Line 45: | ||
=== Documentation === | === Documentation === | ||
* [https://help.dyalog.com/latest/Content/Language/Primitive%20Operators/Variant.htm Dyalog] | * [https://help.dyalog.com/latest/Content/Language/Primitive%20Operators/Variant.htm Dyalog] | ||
* [https://code.jsoftware.com/wiki/Vocabulary/bangdot J] (as < | * [https://code.jsoftware.com/wiki/Vocabulary/bangdot J] (as <syntaxhighlight lang=j inline>!.</syntaxhighlight>) | ||
== References == | == References == | ||
<references/> | <references/> | ||
{{APL built-ins}}[[Category:Primitive operators]] | {{APL built-ins}}[[Category:Primitive operators]] |