こんなのか。でも、こんなの使えねーな。

(defmacro define (name &rest body)
(cond ((listp name) ; (define (name arg...) ...)
`(progn
(defun ,(car name) ,(cdr name) ,@body)
(defvar ,(car name))
(setq ,(car name) (lambda ,(cdr name) ,@body))))
((symbolp name) ; (define name ...)
`(progn
(defvar ,name)
(setq ,name (progn ,@body))
(defalias ',name (progn ,@body))))))