(defparameter *semitone* (list (cons #\A "A#") (cons #\C "C#") (cons #\D "D#") (cons #\F "F#") (cons #\G "G#") (cons #\E "F") (cons #\B "C"))) (defun solve (s) (apply #'concatenate 'string (loop for c across s collect (cdr (assoc c *semitone*))))) (format t "~a~%" (solve (read-line)))