リストのatomの一文字目をもとにグループ分けする処理を書きました。
(remove-if (lambda (x) (string= "@" (subseq (string x) 0 1))) '(t1 t2 @t3 t4 @t5 t6 @t7 t8 t9))
これでremove-ifとremove-if-notで@がついているグループとついていないグループに分けられました。

つぎに、@が出現したらその直後のatomを
((@t3 t4) (@t5 t6) (@t7 t8))
のようにまとめて、残った物は
(t1 t2 t9)
とリストにまとめて最終的にvaluesで両方を返したいです。
リストの先読み?が必要そうだと思っているのですが処理を思いつきません。
よろしくお願いします。