cancel
Showing results for 
Search instead for 
Did you mean: 

Why does @ need :: and why does . need () in amend?

Mannix
New Contributor III
New Contributor III

https://code.kx.com/q/ref/amend/

amend.png
amend2.png
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?

1 REPLY 1

gyorokpeter-kx
New Contributor III
New Contributor III

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.