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.