rslt ← (⍺⍺ ##.each) array ⍝ Fast each for pure operand function. Mike Day's each operator indentifies unique items in its argument [array] and applies monadic operand function ⍺⍺ only once to each in turn. It then distrib- utes the resulting items among any duplicates. If The operand function takes a significant time to evaluate, But has no side-effects, And the argument array has a significant number of duplicate items, Then [each] may produce a significant time saving. Examples: ⍝ This rather contrived example takes only 3 seconds to run: ⎕ ← ⎕dl each time ?10 10⍴2 03.00 1 2 1 2 1 1 2 2 2 1 2 2 1 1 2 2 1 1 1 1 2 2 2 2 2 1 2 1 2 2 2 1 1 2 1 2 2 2 1 1 2 2 2 2 1 2 2 1 1 2 1 1 1 1 1 1 2 2 1 2 2 2 1 2 1 1 1 2 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 2 2 2 2 2 2 1 1 1 2 2 2 1 2 1 1 2 count←0 ⍝ count of operand function calls. {count+←1 ⋄ ⍵+1}¨ 5 5⍴1 2 3 ⍝ primitive each: 2 3 4 2 3 4 2 3 4 2 3 4 2 3 4 2 3 4 2 3 4 2 3 4 2 ⎕ count ← count 0 ⍝ operand function called 25 times. 25 {count+←1 ⋄ ⍵+1}each 5 5⍴1 2 3 ⍝ [each]: same result: 2 3 4 2 3 4 2 3 4 2 3 4 2 3 4 2 3 4 2 3 4 2 3 4 2 count ⍝ operand functin called only 3 times. 3 See also: sam time Back to: contents Back to: Workspaces