僕は Lisper ですが、「Lisp では、マクロを書けばなんでもできる」という主張には、かなり疑問を持っていました。 たとえば、「Emacs Lisp で総称関数を導入することなんてできない」と思っていたのです。しかし、今日ひらめいて、試しにこんなコードを書きました。 (defmacro defmethod (func <type> args &rest body) `(let ((type (intern-soft (concat (substring (symbol-name ',<type>) 1 -1) "p")))) (unless (fboundp ',func) (fset ',func (lambda (data &rest params) (catch 'loop (dolist (predicate-lambda (get ',func 'method)) (if