Try (defmacro deffoo (name) (let ((predicate (intern (format nil "~a-P" name)))) `(sys:multiple-definition ,name deffoo (blah-blah-blah) (defun ,predicate (x) (typep x ',name)) ',name))) I must confess that I cannot understand why this remains undocumented.