Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (eval-when (:compile-toplevel)
- (defun sym (&rest things)
- (intern
- (string-upcase
- (with-output-to-string (s)
- (dolist (th things)
- (princ ;; this depends on *print-case* *print-base* *print-radix* etc, etc… Do you really want that???
- ;; Notably, in my repl, all-uppercase symbol names are printed in lowercase, since people are so hateful of uppercase :-(
- th s))))))
- (defun generate-maker (name)
- (let* ((class-name (etypecase name
- (symbol name)
- (class (class-name name))))
- (macro-name (sym "make-" class-name)))
- `(defmacro ,macro-name (args &body body)
- `(make-instance ',,class-name
- :fun (lambda ,args ,@body))))))
- (defmacro define-maker (name)
- (generate-maker name))
- (define-maker some-class)
- ;; what's the point of definining macros at run-time???
- (eval (generate-maker (class-of (make-instance 'some-class))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement