One could also wish that (apply f args) could be written as (f . args). This makes perfect sense to me, even more so than (f @args), although logically they would mean the same.
The difference is that . is a notation for CONS, while @ may be used anywhere in a list. This means that (1 2 @others 3) cannot reuse others, and therefore shouldn't do so when the splice happens to be at the end either.
(1 . 2) means (cons 1 2)
(1 2 . foo) means (cons 1 (cons 2 foo))
(1 2 @foo) is slightly more complicated as it needs to loop over foo