rslt ← ##.din '' ⍝ Evaluation of multi-line D-expression. {name} ← ##.din name ⍝ Definition of multi-line Dfn. NB: This function is available as User-Command: ]dinput. [din] inputs a multi-line expression or definition directly from the session, using ⍞-prompting. [din] anticipates the input of closing braces and infers appropriate indentation for each prompt. "White dots" are included at each tab point in the prompt as a reminder that we're in an input loop and to assist in keeping track of nesting levels. Entering a single '→' character, at any time, will abort the input loop. In the following illustration, only the underlined characters are typed. Notice, in particular, that no closing braces need be entered: din'dup' ¯¯¯¯¯¯¯¯ · dup←{ · · { ¯ · · · ⍵ ⍵ ¯¯¯ · · }⍵ ¯ · } Technical note: After swapping leading '·' characters in prompted input for blanks, [din] accum- ulates in ⍺ and ⍵: ⍺ defn: Vector of input line vectors, including comments. ⍵ expr: ⋄-separated concatenation of uncommented input lines. At exit, [din] tries to ⎕FX accumulated [defn] lines. If this succeeds, the name of the newly-fixed function is returned as a shy result. Otherwise, if the fix fails, the accumulated [expr] is executed and, if succ- essful, its result is returned. This means that a dfn definition will be fixed as entered, with comments intact. In addition, though a multi-line _derived_ function will fail to ⎕FX, it will be established at second attempt by the executed assignment. See examples below. Examples: din'' ⍝ multi-line expression evaluation. · ↑{ · · size←⎕size ⍵ · · ⍕⍵,size · }¨↓⎕nl ⍳10 dddd 1044 din 6760 dup 324 gcd 480 notes 4652 display ⎕cr din'gcd' ⍝ multi-line dfn definition. · gcd←{ ⍝ (c) Euclid · · ⍺=0:|⍵ · · ⍵ ∇ |⍺-⍵ · } ┌→───────────────────────┐ ↓gcd←{ ⍝ (c) Euclid│ │ ⍺=0:|⍵ │ │ ⍵ ∇|⍺-⍵ │ │} │ └────────────────────────┘ ⎕cr din'dddd' ⍝ multi-line derived function definition: · dddd←{ · · ⍵ ⍵ ⍝ comments · }∘{ ⍝ disappear · · ⍵ ⍵ · }{ · · ⍺⍺ ⍺⍺ ⍵ · } ┌───────────────┬─────────┐ │┌─────┬─┬─────┐│{⍺⍺ ⍺⍺ ⍵}│ ││{⍵ ⍵}│∘│{⍵ ⍵}││ │ │└─────┴─┴─────┘│ │ └───────────────┴─────────┘ See also: dots Back to: contents Back to: Workspaces