System Labels

From NARS2000
Revision as of 14:08, 19 March 2019 by WikiSysop (talk | contribs)
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Normally, execution of an Anonymous Function/Operator/Hyperator (AFOH) or User-Defined Function/Operator/Hyperator (UDFOH) starts execution at line one. However, in certain contexts, execution may start at a different place depending upon the context and the presence of a System Label. These special labels start with a quad symbol so as to distinguish them from normal labels. The following table lists the system labels defined so far and the special context in which they are used.

⎕ID: is called when an identity element is needed as in foo/R where R is empty.
⎕MS: is called when an AFOH/UDFOH is invoked by the Multiset Operator.
⎕PRO: is called when a prototype element is needed as in foo¨R where R is empty, or L foo¨R where one of both of L or R is empty and the other is conformable.


For example, as a UDFOH

    ∇ Z←{L} foo R
[1]   Z←L,R ⋄ →0
[2]   ⎕ID :Z←'Identity' ,(⎕NC 'L'),(⎕NC 'R') ⋄ →0
[3]   ⎕MS :Z←'Multiset' ,(⎕NC 'L'),(⎕NC 'R') ⋄ →0
[4]   ⎕PRO:Z←'Prototype',(⎕NC 'L'),(⎕NC 'R') ⋄ →0
    ∇

or equivalently as an AFOH

      foo←{
0:⍺←0 ⋄ ⍺,⍵
⋄ ⎕ID :'Identity' ,(⎕NC '⍺'),⎕NC '⍵'
⋄ ⎕MS :'Multiset' ,(⎕NC '⍺'),⎕NC '⍵'
⋄ ⎕PRO:'Prototype',(⎕NC '⍺'),⎕NC '⍵'}
      ⎕FMT foo/⍬
┌──────────────┐
│┌8───────────┐│
││Identity 0 2││
│└────────────┘2
└∊─────────────┘
      {⍺+÷⍵ ⋄ ⎕ID:∞}/⍬
∞
      {⍺+÷⍵ ⋄ ⎕ID:∞}\7⍴1
1 2 1.5 1.666666667 1.6 1.625 1.615384615
      foo⍦ 1
Multiset 0 2
      2 foo⍦ 1
Multiset 2 2
      ⎕FMT 1 foo¨⍬
┌0──────────────┐
│┌11───────────┐│
││          0 0││
│└─────────────┘2
└∊──────────────┘
      foo/¨0⍴⊂⍬
NONCE ERROR
      foo/¨0⍴⊂⍬
         ∧
  • In the Identity element case, the AFOH/UDFOH is called with the Reduction function's right argument prototype as the right argument to the AFOH/UDFOH; the left argument is undefined. For example, in foo/3 0⍴⊂⍳4, the (right) argument passed to the ⎕ID: entry point is 0 0 0 0. The return value from the AFOH/UDFOH is used as the common item in the result. Thus, the ⎕ID entry point is called only once even though the result may have multiple copies of the return value.

  • In the Multiset case, the AFOH/UDFOH is called with the same argument(s) as the Multiset derived function.

  • In the Prototype case, the AFOH/UDFOH is called with arguments that are the prototypes of the respective arguments; in the monadic case, the left argument is undefined.

  • For the moment, if two or more system labels would be called at the same time (such as the last example above), a NONCE ERROR is signaled.