Where - kevinlawler/kona GitHub Wiki
&x x:int
takes a list of ints and returns the ints from 0 to (length of x-1), each repeated as many times as x[i].
Some examples may make this clearer:
&1 2 3 4 5 0 1 1 2 2 2 3 3 3 3 4 4 4 4 4 &5 4 3 2 1 / 5 0s, 4 1s, 3 2s, 2 3s, 1 4 0 0 0 0 0 1 1 1 1 2 2 2 3 3 4 &0 0 1 0 0 1 1 0 / where are the 1s? 2 5 6 (!10)!2 / 0 to 9 modulus 2 0 1 0 1 0 1 0 1 0 1 &0=(!10)!2 / where are the 1s in 0 to 9 modulus 2: filter even numbers 0 2 4 6 8 sparse:{((#x)#0 1)[&x]} / index repeating 0 1 by (where x) {((#x)#0 1)[&x]} sparse 10 2 35 1 8 1 9 / 10 0s, 2 1s, 35 0s, 1 1, 8 0s, 1 1, 9 0s 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
One way to look at verb & is by using the following histogram example:
h:1 2 3 2 1 /we throw 9 balls into 5 boxes: 1 ball fell in box 0 etc 1 2 3 2 1 &h /we tag each ball with the box number (starting with 0) and line them up 0 1 1 2 2 2 3 3 4 #:'=0 1 1 2 2 2 3 3 4 /put them back into boxes 1 2 3 2 1
Note though that this relies on there being at least one ball in each bucket.
h:1 2 3 2 1 (h;#:'=&h) (1 2 3 2 1 1 2 3 2 1) h:0 2 3 2 1 (h;#:'=&h) (0 2 3 2 1 2 3 2 1)
Here is a more complete histogram than #:'=
.
h:0 2 3 2 1 hist:{k:x@*:'g:=x;@[&1+|/k;k;:;#:'g]} (h;hist@&h) (0 2 3 2 1 0 2 3 2 1)