Guest User

Untitled

a guest
Jul 22nd, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.59 KB | None | 0 0
  1. (eval-when (:compile-toplevel :load-toplevel :execute)
  2. (defmacro abbr (short long &optional lambda-list)
  3. "Abbreviate LONG macro or function name as SHORT. If LAMBDA-LIST is present,
  4. also copy appropriate SETF-expander."
  5. `(eval-always
  6. (cond
  7. ((macro-function ',long)
  8. (setf (macro-function ',short) (macro-function ',long)))
  9. ((special-operator-p ',long)
  10. (error "Can't abbreviate a special-operator ~a" ',long))
  11. ((fboundp ',long)
  12. (setf (fdefinition ',short) (fdefinition ',long))
  13. ,(when lambda-list
  14. `(define-setf-expander ,short ,(append lambda-list)
  15. (values ,@(multiple-value-bind
  16. (dummies vals store store-form access-form)
  17. (get-setf-expansion (cons long lambda-list))
  18. (let ((expansion-vals (mapcar (lambda (x) `(quote ,x))
  19. (list dummies
  20. vals
  21. store
  22. store-form
  23. access-form))))
  24. (setf (second expansion-vals)
  25. (cons 'list vals))
  26. expansion-vals))))))
  27. (t
  28. (error "Can't abbreviate ~a" ',long)))
  29. (setf (documentation ',short 'function) (documentation ',long 'function))
  30. ',short)))
Add Comment
Please, Sign In to add comment