;;; -*-Scheme-*-
;;;
;;; An attempt on defsetf and setf

(define defsetf)
(define get-setter)

(let ((setters '()))

  (set! defsetf
	(lambda (accessor setter)
	  (set! setters (cons (cons accessor setter) setters))
	  #v))

  (set! get-setter
	(lambda (accessor)
	  (let ((a (assoc accessor setters)))
	    (if a
		(cdr a)
		(error 'get-setter "no setter for ~s" accessor))))))

(define-macro (setf var val)
  (cond
   ((symbol? var) `(set! ,var ,val))
   ((pair? var)
    (let ((setter (get-setter (eval (car var)))))
      `(,setter ,@(cdr var) ,val)))
   (else (error 'setf "symbol or form expected"))))