(defparameter translation-list (first . 1st) (second . 2nd) (third . 3rd) ;; etc ) ;; version 1 (defun make-macro (name new-name) `(defmacro ,new-name (&body body) (append (list ',name) body))) (defmacro translate-names (names) (loop for x in names collect (make-macro (car x) (cdr x)) into forms finally (return (cons 'progn forms)))) (translate-names translation-list) ;; version 2 ;; I realised I could do this later (defun set-translation (name-pair) (if (macro-function (car name-pair)) (setf (macro-function (cdr name-pair)) (macro-function (car name-pair))) (setf (symbol-function (cdr name-pair)) (symbol-function (car name-pair))))) (defun translations (name-pairs) (loop for pair in name-pairs do (set-translation pair))) (translations translation-list)