Advertisement
Guest User

Untitled

a guest
Jun 11th, 2018
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.99 KB | None | 0 0
  1.  
  2. (eval-when (:compile-toplevel)
  3.  
  4. (defun sym (&rest things)
  5. (intern
  6. (string-upcase
  7. (with-output-to-string (s)
  8. (dolist (th things)
  9. (princ ;; this depends on *print-case* *print-base* *print-radix* etc, etc… Do you really want that???
  10. ;; Notably, in my repl, all-uppercase symbol names are printed in lowercase, since people are so hateful of uppercase :-(
  11. th s))))))
  12.  
  13. (defun generate-maker (name)
  14. (let* ((class-name (etypecase name
  15. (symbol name)
  16. (class (class-name name))))
  17. (macro-name (sym "make-" class-name)))
  18. `(defmacro ,macro-name (args &body body)
  19. `(make-instance ',,class-name
  20. :fun (lambda ,args ,@body))))))
  21.  
  22.  
  23. (defmacro define-maker (name)
  24. (generate-maker name))
  25.  
  26.  
  27. (define-maker some-class)
  28.  
  29.  
  30. ;; what's the point of definining macros at run-time???
  31. (eval (generate-maker (class-of (make-instance 'some-class))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement