Guest User

Untitled

a guest
Aug 21st, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.71 KB | None | 0 0
  1. (defmacro with-gethash-accessors (bindings &body body)
  2. `(macrolet ,(mapcar (lambda (b)
  3. (if (symbolp b)
  4. (let ((sym (gensym))
  5. (keyword (intern (string b) :keyword)))
  6. `(,b (,sym) `(gethash ,,keyword ,,sym))))) bindings)
  7. ,@body))
  8.  
  9. ;; target input:
  10. (with-gethash-accessors (x y)
  11. (x object)
  12. (y object))
  13.  
  14. ;; desired output:
  15. (macrolet ((x (#:gensym1) `(gethash :x ,#:gensym1))
  16. (y (#:gensym2) `(gethash :y ,#:gensym2)))
  17. (x object)
  18. (y object))
  19.  
  20. ;; actual output:
  21. (macrolet ((x (#:gensym1) `(gethash ,:x ,#:gensym1))
  22. (y (#:gensym2) `(gethash ,:y ,#:gensym2)))
  23. (x object)
  24. (y object))
Add Comment
Please, Sign In to add comment