⍝ Save WS by sharing subarrays:
cvecs←'' ⍝ make symbol: "cvecs".
wsused←{-⎕wa-⎕wa⊣∘⍎⍵} ⍝ extra ws used by executing ⍵.
:If 32={2×⎕size'⍵'}⍬ ⍝ 32-bit interpreter:
wsused'cvecs←(⍳1e3)⌽¨⊂⎕a' ⍝ WS used by distinct char vectors,
46336
wsused'cvecs←pack cvecs' ⍝ sharing recovers most of it.
¯41236
:Else ⍝ 64-bit
wsused'cvecs←(⍳1e3)⌽¨⊂⎕a' ⍝ WS used by distinct char vectors,
69584
wsused'cvecs←pack cvecs' ⍝ sharing recovers most of it.
¯59984
:EndIf
A←'Scissors' 'Paper' 'Stone'
B←'Paper' 'Stone' 'Scissors'
C←'Stone' 'Scissors' 'Paper'
:If 32={2×⎕size'⍵'}⍬ ⍝ 32-bit interpreter:
wsused'A B C←pack A B C' ⍝ Sharing subarrays <among> variables,
¯152
nested←⍳¨∘⍳¨∘⍳¨∘⍳¨∘⍳3 3 ⍝ complex nested array:
wsused'nested←pack nested' ⍝ significant saving.
¯17960
wsused'dups←{⍵ ⍵}/⍳12' ⍝ deep, shared structure.
268
wsused'dups←3+dups-3' ⍝ unsharing uses much space.
44764
wsused'dups←pack dups' ⍝ resharing recovers space.
¯44780
lvec←⊃{⍺ ⍵}/1↓¨10⍴⊂' ',⎕a ⍝ unshared list of char vectors.
wsused 'lvec←pack lvec' ⍝ sharing saves space.
¯404
:Else ⍝ 64-bit interpreter:
wsused'A B C←pack A B C' ⍝ Sharing subarrays <among> variables,
¯256
nested←⍳¨∘⍳¨∘⍳¨∘⍳¨∘⍳3 3 ⍝ complex nested array:
wsused'nested←pack nested' ⍝ significant saving.
¯35920
wsused'dups←{⍵ ⍵}/⍳12' ⍝ deep, shared structure.
536
wsused'dups←3+dups-3' ⍝ unsharing uses much space.
89528
wsused'dups←pack dups' ⍝ resharing recovers space.
¯89560
lvec←⊃{⍺ ⍵}/1↓¨10⍴⊂' ',⎕a ⍝ unshared list of char vectors.
wsused 'lvec←pack lvec' ⍝ sharing saves space.
¯592
:EndIf
⍝∇ pack
Back to: code
Back to: Workspaces