Array Predicates

From NARS2000
Revision as of 19:51, 18 August 2008 by Sudleyplace (talk | contribs)
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

This clever idea of Bob Bernecky's [1] provides a performance improvement for certain expressions by marking certain arrays with special properties. For example, the property of being a Permutation Vector [2] is invariant (is still a Permutation Vector, albeit a different one) under various APL primitives such as rotate/reversal (L⌽PV and ⌽PV) and grade up/down (⍋PV and ⍒PV).

Bernecky has defined several array predicate properties, one of which has been implemented in NARS so far.

Permutation Vectors

In this case, index generator (⍳R) produces a Permutation Vector, as does deal (L?R) when the left and right arguments are the same — the results of these primitives are marked internally as Permutation Vectors. Subsequent use of such arrays maintains that property when operated on by rotate/reversal and grade up/down. Moreover, the two grade (⍋PV and ⍒PV) and the index of (PV⍳R) primitives use a much faster (linear) algorithm than they would normally, given that the appropriate argument is a Permutation Vector.