fork download
  1. (defmacro define-access (F A)
  2. (let ((X (gensym))
  3. (Y (gensym)))
  4. `(progn
  5. (defun ,F (,X)
  6. (,A ,X))
  7. (defsetf ,F (,X) (,Y)
  8. `(setf (,',A ,,X) ,,Y)))))
  9. ; your code goes here
  10.  
  11. (pprint (macroexpand '(define-access fname car)))
  12. (define-access fname car)
  13. (pprint (macroexpand '(setf (fname foo) bar)))
  14. (defvar var (list 1 2 3))
  15. (setf (fname var) 10)
  16. (pprint var)
Success #stdin #stdout 0s 10728KB
stdin
Standard input is empty
stdout
(PROGN (DEFUN FNAME (#:G3210) (CAR #:G3210))
 (DEFSETF FNAME (#:G3210) (#:G3211) (LIST 'SETF (LIST 'CAR #:G3210) #:G3211)))
(LET* ((#:G3215 FOO) (#:G3216 BAR)) (SETF (CAR #:G3215) #:G3216))
(10 2 3)