over, scan¶
The keywords over and scan are covers for the accumulating iterators, Over and Scan.
It is good style to use over and scan with unary and binary values.
Just as with Over and Scan, over and scan share the same syntax and perform the same computation; but while scan returns the result of each evaluation, over returns only the last.
See the Accumulators for a more detailed discussion.
Converge¶
v1 over x over[v1;x] v1 scan x scan[v1;x]
(vv)over x over[vv;x] (vv)scan x scan[vv;x]
Where
v1is a unary applicable valuevvis a variadic applicable value
applies the value progressively to x, then to v1[x] (or vv[x]), and so on, until the result matches (within comparison tolerance) either
- the previous result; or
x.
q)n:("the ";("quick ";"brown ";("fox ";"jumps ";"over ");"the ");("lazy ";"dog."))
q)raze over n
"the quick brown fox jumps over the lazy dog."
q)(,/)over n
"the quick brown fox jumps over the lazy dog."
q){x*x} scan .01
0.01 0.0001 1e-08 1e-16 1e-32 1e-64 1e-128 1e-256 0
See the Accumulators for more detail, and for the related forms Do and While.
MapReduce, Fold¶
v2 over x over[v2;x] v2 scan x scan[v2;x]
Where v2 is a binary applicable value, applies v2 progressively between successive items.
scan[v2;] is a uniform function and over[v2;] is an aggregate function.
q)(+) scan 1 2 3 4 5
1 3 6 10 15
q)(*) over 1 2 3 4 5
120
See the Accumulators for a more detailed discussion.
Keywords¶
Q has keywords for common projections of scan and over.
For example, sums is scan[+;] and prd is over[*;].
Efficiency and good q style prefers these keywords;
i.e. prd rather than over[*;] or */.
keyword equivalents
---------------------------------------
all over[and;] &/ Lesser Over
any over[or;] |/ Greater Over
max over[|;] |/ Greater Over
maxs scan[|;] |\ Greater Scan
min over[&;] &/ Lesser Over
mins scan[&;] &\ Lesser Scan
prd over[*;] */ Multiply Over
prds scan[*;] *\ Multiply Scan
raze over[,;] ,/ Join Over
sum over[+;] +/ Add Over
sums scan[+;] +\ Add Scan