System Labels

From NARS2000
Revision as of 21:31, 12 August 2009 by WikiSysop (talk | contribs) (New page: <p>Normally, execution of a user-defined function/operator starts execution at line one. However, in certain contexts, execution may start at a different line depending upon the context a...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

Normally, execution of a user-defined function/operator starts execution at line one. However, in certain contexts, execution may start at a different line depending upon the context and the presence of a System Label. These special labels start with a quad symbol so as to present no confusion with normal labels. The following table lists the system labels defined so far and the special context in which they are used.

⎕PROTOTYPE: is called where a prototype element is needed as in foo¨R where R is empty.
⎕IDENTITY: is called where an identity element is needed as in foo/R where R is empty.


For example,

    ∇ Z←L foo R
[1]   Z←L,R ⋄ →0
[2]   ⎕PROTOTYPE:Z←'Prototype' ⋄ →0
[3]   ⎕IDENTITY:Z←'Identity'
    ∇

      ⎕fmt foo/⍳0
┌──────────┐
│┌8───────┐│
││Identity││
│└────────┘2
└∊─────────┘
      ⎕fmt 1 foo¨⍬
┌0──────────┐
│┌9────────┐│
││Prototype││
│└─────────┘2
└∊──────────┘

Note that in the Identity element case, the function is called with the reduction function's right argument's prototype as the right argument to the user-defined function/operator; the left argument is undefined. For example, in foo/3 0⍴⊂⍳4, the (right) argument passed to the function is 0 0 0 0.