アルファベットや数字は半角でお願いしますっていったじゃないですかー。やっぱり全角も欲しいってやめてくださいよ。
文字種は 26*2+10 しかないから、もう連想リストでいいかなって、やっつけた。
(defun eisuu-convert (string &optional (han->zen t) ) (let* ((hankaku "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz") (zenkaku "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz") (hz-alist (if han->zen (pairlis (coerce hankaku 'list) (coerce zenkaku 'list)) (pairlis (coerce zenkaku 'list) (coerce hankaku 'list))))) (coerce (mapcar #'(lambda (x) (let ((result-here (assoc x hz-alist))) (if result-here (cdr result-here) x))) (coerce string 'list)) 'string)))