System Labels: Difference between revisions

From NARS2000
Jump to navigationJump to search
No edit summary
No edit summary
Line 52: Line 52:


* <p>For the moment, if two or more system labels would be called at the same time (such as the last example above), a <apll>NONCE ERROR</apll> is signaled.</p>
* <p>For the moment, if two or more system labels would be called at the same time (such as the last example above), a <apll>NONCE ERROR</apll> is signaled.</p>
* This idea was taken from the paper by David A. Rabenhorst, "[http://portal.acm.org/citation.cfm?id=801228 APL function variants and system labels]", ACM SIGAPL APL Quote Quad, APL83, Volume 13,  Issue 3  (March 1983), pp. 281-284.

Revision as of 17:56, 29 August 2010

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.

⎕PRO: is called where 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.
⎕ID: 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]   ⎕PRO:Z←'Prototype' ⋄ →0
[3]   ⎕ID:Z←'Identity'
    ∇

      ⎕fmt foo/⍬
┌──────────┐
│┌8───────┐│
││Identity││
│└────────┘2
└∊─────────┘
      ⎕fmt 1 foo¨⍬
┌0──────────┐
│┌9────────┐│
││         ││
│└─────────┘2
└∊──────────┘
      foo/¨0⍴⊂⍬
NONCE ERROR
      foo/¨0⍴⊂⍬
         ∧

  • In the Identity element case, the function is called with the reduction function's right argument 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. The return value from the function 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 Prototype case, the user-defined function/operator 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.