2023.01.29 11:44 AM
https://code.kx.com/q/ref/amend/
Based on the above, why does . need () to get the entire list and @ need ()?
Surely this would imply:
q) 1 2 3 4 5 . () /this is NOT the case
1 2 3 4 5
and
q) list @ :: /this is NOT the case
list
However
q)list @ enlist[::] /this is the case
list
Can anyone help me make sense of this?
2023.01.30 02:35 AM
The binary form of . is not exactly the same as the 3 or 4 parameter version. The handling of () is special, as it's equivalent to list[] instead of list . ().
For list @ :: , this is not the correct syntax for what you want to do as :: is being parsed as a binary operator missing its right argument. If you write it as list @ (::) it works.
list @ enlist[::] is something else: note that here the index is a list, not a single element, therefore the result will be a list as well, meaning it's actually enlist[list] - while this looks like the original list in the printout, if you check the type of the result you will notice that they are different.
EMEA
Tel: +44 (0)28 3025 2242
AMERICAS
Tel: +1 (212) 447 6700
APAC
Tel: +61 (0)2 9236 5700
KX. All Rights Reserved.
KX and kdb+ are registered trademarks of KX Systems, Inc., a subsidiary of FD Technologies plc.