rslt ← (fun ##.file) fname ⍝ Apply function to native file tie.
Native file 'fname' is opened; the function operand called with the tie number
as argument; and the file closed again. The result of the derived function is
the result of the operand function.
Technical notes:
The coding is fairly straightforward.
file←{ ⍝ Apply operand function to native file tie.
tie←⍵ ⎕NTIE 0 ⍝ open file.
rslt←⍺⍺ tie ⍝ operate on file.
{rslt}⎕NUNTIE tie ⍝ close and return result.
}
SL suggests the following "crazy" alternative coding:
file←{
⊃⊢∘⎕nuntie\⌽⊢∘⍺⍺\2⍴⍵ ⎕ntie 0
}
Local variables are avoided by duplicating a value to produce a pair and operat-
ing on each item of the pair in turn. The sequence of events could be represent-
ed graphically by the following "railway diagram":
⊃ ⊢∘⎕nuntie\⌽ ⊢∘⍺⍺\2⍴⍵ ⎕ntie 0 expression
↓ ↓ ↓ ↓ ↓ ↓
──┐├─[⎕nuntie]─┐─[⍺⍺]─┬─[⎕ntie]── railway diagram
└───────────┘└──────┘
↑ ↑ ↑ ↑ ↑ ↑
│ │ │ │ │ └───⍵ ⎕ntie 0── opens file and returns tie number.
│ │ │ │ └────2⍴─────────── duplicates tie number into a pair.
│ │ │ └───⊢∘⍺⍺\───────────── applies ⍺⍺ to second item of pair.
│ │ └───⌽──────────────────── swaps the items of the pair.
│ └───⊢∘⎕nuntie\──────────────────── unties pair's new second item.
└───⊃──────────────────────────────── extracts pair's new first item.
Example:
⎕nsize file ⎕wsid,'.dws' ⍝ size of saved version of this workspace.
217608
See also: getfile xtabs
Back to: contents
Back to: Workspaces