Skip to content

next, prev, xprev

Immediate or near neighbors

What if just under this layer of life you could
find the old one, moving forward just the same,
and just above, what’s yet to come
— Emily Berry, Unexhausted Time

next

Next item/s in a list

next x      next[x]

Where x is a list, for each item in x, returns the next item.

For the last item, it returns a null if the list is a vector, otherwise an empty list ().

q)next 2 3 5 7 11
3 5 7 11 0N
q)next (1 2;"abc";`ibm)
"abc"
`ibm
`int$()

Duration of a quote:

q)update (next time)-time by sym from quote

next is a uniform function.

prev

Immediately preceding item/s in a list

prev x     prev[x]

Where x is a list, for each item, returns the previous item.

For the first item, it returns a null if the list is vector, otherwise an empty list ().

q)prev 2 3 5 7 11
0N 2 3 5 7
q)prev (1 2;"abc";`ibm)
`int$()
1 2
"abc"

Shift the times in a table:

q)update time:prev time by sym from t

prev is a uniform function.

xprev

Nearby items in a list

x xprev y     xprev[x;y]

Where x is a long atom and y is a list, returns for each item of y the item x indices before it.

The first x items of the result are null, empty or blank as appropriate.

There is no xnext function.

Fortunately xprev with a negative number on the left can achieve this.

q)2 xprev 2 7 5 3 11
0N 0N 2 7 5
q)-2 xprev 2 7 5 3 11
5 3 11 0N 0N
q)1 xprev "abcde"
" abcd"

xprev is a right-uniform function.


Each Prior
Selection