あと@かどうかを調べるときの処理は、subseq使うより、

(defun @-p (x) (eql (position #\@ x) 0))

とかのが効率良いと思う。subseqは新しくシーケンス作るので、
それが必要な場合以外では効率悪いで。