rslt ← (func ##.until cond) argt ⍝ Conditional function power. NB: [until] is implemented directly as primitive operator ⍣. Left operand [func] is applied cumulatively to argument [argt] until right operand [cond], applied to the result, returns 'true'. Notice that, in common with the :Repeat ··· :Until control structure, the test for termination is performed _after_ an initial application of the left operand. This means that the operand is applied once even if the original argument satisfies the termination conditions. Compare this with the →while← operator. Examples: {⍵,'.'} until {60=⍴⍵} 'Note' ⍝ Extend until 60 wide. Note........................................................ ↓ until {1=⍴⍴⍵} 2 2 2 2⍴⍳16 ⍝ Split until vector. ┌─────────────────────┬────────────────────────────┐ │┌─────────┬─────────┐│┌────────────┬─────────────┐│ ││┌───┬───┐│┌───┬───┐│││┌────┬─────┐│┌─────┬─────┐││ │││1 2│3 4│││5 6│7 8│││││9 10│11 12│││13 14│15 16│││ ││└───┴───┘│└───┴───┘│││└────┴─────┘│└─────┴─────┘││ │└─────────┴─────────┘│└────────────┴─────────────┘│ └─────────────────────┴────────────────────────────┘ {⍵+1} until {1} 0 ⍝ {⍵+1} applied once. 1 {1↓⍵} while {' '∊⍵} 'hello world' ⍝ While & until _concur_ if initial world {1↓⍵} until {~' '∊⍵} 'hello world' ⍝ ·· argument _escapes_ termination. world {1↓⍵} while {'⎕'∊⍵} 'hello world' ⍝ While & until _differ_ if initial hello world {1↓⍵} until {~'⎕'∊⍵} 'hello world' ⍝ ·· argument _incurs_ termination. ello world See also: cond while limit pow traj Back to: contents Back to: Workspaces