(define (create-vector . lst) (let ((data (apply vector lst))) (make-procedure-with-setter (lambda args (cond ((null? args) data) ((= (length args) 1) (vector-ref data (car args))))) (lambda (i val) (vector-set! data i val)))))