Multi-Line Dfns

The single expression which provides the result of the dfn may be preceded by any number of assignment statements. Each such statement introduces a name which is local to the function.

For example in the following, the expressions sum← and num← create local definitions sum and num.

      mean←{          ⍝ Arithmetic mean
          sum←+/⍵     ⍝ Sum of items
          num←⍴⍵      ⍝ Number of items
          sum÷num     ⍝ Mean
       }

An assignment to is not allowed and will result in an error. For assignment to , see Default Left Argument.

Note that dfns may be commented in the usual way using .

When the interpreter encounters a local definition, a new local name is created. The name is shadowed dynamically exactly as if the assignment had been preceded by: ⎕shadow name .

It is important to note the distinction between the two types of statement above. There can be many assignment statements, each introducing a new local definition, but only a single expression where the result is not assigned. As soon as the interpreter encounters such an expression, it is evaluated and the result returned immediately as the result of the function.

For example, in the following,

      mean←{          ⍝ Arithmetic mean
          sum←+/⍵     ⍝ Sum of items
          num←⍴⍵      ⍝ Number of items
          sum,num     ⍝ Attempt to show sum,num (wrong)!
          sum÷num     ⍝ ... and return result.
       }
		

... as soon as the interpreter encounters the expression sum,num, the function terminates with the two item result (sum,num) and the following line is not evaluated.

 

To display arrays to the session from within a dfn, you can use the explicit display forms ⎕← or ⍞← as in:

      mean←{          ⍝ Arithmetic mean
          sum←+/⍵     ⍝ Sum of items
          num←⍴⍵      ⍝ Number of items
          ⎕←sum,num   ⍝ show sum,num.
          sum÷num     ⍝ ... and return result.
       }

Note that local definitions can be used to specify local nested dfns:

      rms←{                ⍝ Root Mean Square
         root←{⍵*0.5}      ⍝ ∇ Square root
         mean←{(+/⍵)÷⍴⍵}   ⍝ ∇ Mean
         square←{⍵×⍵}      ⍝ ∇ Square
         root mean square
       }