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
v1
is a unary applicable valuevv
is 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