Nest: Difference between revisions
m (Text replacement - "http://help.dyalog.com" to "https://help.dyalog.com") |
m (Text replacement - "<source" to "<syntaxhighlight") |
||
(One intermediate revision by the same user not shown) | |||
Line 1: | Line 1: | ||
{{Built-ins|Nest|⊆|⊃}}, also called '''Conditional Enclose''' or '''Enclose If Simple''' (commonly abbreviated as '''eis'''), is a [[monadic]] [[primitive function]] that applies [[Enclose]] to the given [[argument]], but only if it is [[simple]]. Nest first appeared as an extension to [[SHARP APL]]<ref>[https://www.jsoftware.com/papers/satn45.htm "Language Extensions of May 1983"]. SATN-45, 1983-05-02.</ref> using the [[glyph]] < | {{Built-ins|Nest|⊆|⊃}}, also called '''Conditional Enclose''' or '''Enclose If Simple''' (commonly abbreviated as '''eis'''), is a [[monadic]] [[primitive function]] that applies [[Enclose]] to the given [[argument]], but only if it is [[simple]]. Nest first appeared as an extension to [[SHARP APL]]<ref>[https://www.jsoftware.com/papers/satn45.htm "Language Extensions of May 1983"]. SATN-45, 1983-05-02.</ref> using the [[glyph]] <syntaxhighlight lang=apl inline>⊃</syntaxhighlight>, and was added to [[Dyalog APL]] 16.0 using the glyph <syntaxhighlight lang=apl inline>⊆</syntaxhighlight>. | ||
== Examples == | == Examples == | ||
Line 5: | Line 5: | ||
Nest is useful when a [[nested array]] is expected but the user may supply a simple array instead. For example, consider a function which expects one or more English words in uppercase and counts the words that include the letter E. | Nest is useful when a [[nested array]] is expected but the user may supply a simple array instead. For example, consider a function which expects one or more English words in uppercase and counts the words that include the letter E. | ||
< | <syntaxhighlight lang=apl> | ||
EWords←{+/'E'∊¨⍵} | EWords←{+/'E'∊¨⍵} | ||
</ | </syntaxhighlight>{{Works in|[[Dyalog APL]]}} | ||
If the user gives multiple words in the usual notation, it works correctly: | If the user gives multiple words in the usual notation, it works correctly: | ||
< | <syntaxhighlight lang=apl> | ||
EWords 'I' 'ATE' 'DINNER' 'AND' 'WENT' 'TO' 'SLEEP' ⍝ ATE, DINNER, WENT, SLEEP | EWords 'I' 'ATE' 'DINNER' 'AND' 'WENT' 'TO' 'SLEEP' ⍝ ATE, DINNER, WENT, SLEEP | ||
4 | 4 | ||
</ | </syntaxhighlight>{{Works in|[[Dyalog APL]]}} | ||
But if the user gives only one word, < | But if the user gives only one word, <syntaxhighlight lang=apl inline>EWords</syntaxhighlight> will count E's in each ''letter'' instead, giving the wrong answer: | ||
< | <syntaxhighlight lang=apl> | ||
EWords 'SLEEP' | EWords 'SLEEP' | ||
2 | 2 | ||
</ | </syntaxhighlight>{{Works in|[[Dyalog APL]]}} | ||
In this case, the programmer can apply Nest to the argument so that the array has a consistent structure. | In this case, the programmer can apply Nest to the argument so that the array has a consistent structure. | ||
< | <syntaxhighlight lang=apl> | ||
EWords2←{+/'E'∊¨⊆⍵} | EWords2←{+/'E'∊¨⊆⍵} | ||
EWords2 'I' 'ATE' 'DINNER' 'AND' 'WENT' 'TO' 'SLEEP' | EWords2 'I' 'ATE' 'DINNER' 'AND' 'WENT' 'TO' 'SLEEP' | ||
Line 31: | Line 31: | ||
EWords2 'SLEEP' | EWords2 'SLEEP' | ||
1 | 1 | ||
</ | </syntaxhighlight>{{Works in|[[Dyalog APL]]}} | ||
== External links == | == External links == |
Latest revision as of 22:22, 10 September 2022
⊆ ⊃
|
Nest (⊆
, ⊃
), also called Conditional Enclose or Enclose If Simple (commonly abbreviated as eis), is a monadic primitive function that applies Enclose to the given argument, but only if it is simple. Nest first appeared as an extension to SHARP APL[1] using the glyph ⊃
, and was added to Dyalog APL 16.0 using the glyph ⊆
.
Examples
Nest is useful when a nested array is expected but the user may supply a simple array instead. For example, consider a function which expects one or more English words in uppercase and counts the words that include the letter E.
EWords←{+/'E'∊¨⍵}
If the user gives multiple words in the usual notation, it works correctly:
EWords 'I' 'ATE' 'DINNER' 'AND' 'WENT' 'TO' 'SLEEP' ⍝ ATE, DINNER, WENT, SLEEP 4
But if the user gives only one word, EWords
will count E's in each letter instead, giving the wrong answer:
EWords 'SLEEP' 2
In this case, the programmer can apply Nest to the argument so that the array has a consistent structure.
EWords2←{+/'E'∊¨⊆⍵} EWords2 'I' 'ATE' 'DINNER' 'AND' 'WENT' 'TO' 'SLEEP' 4 EWords2 'SLEEP' 1
External links
Documentation
References
- ↑ "Language Extensions of May 1983". SATN-45, 1983-05-02.