(define (make-w-vector coordinatenlijst)
  (list->vector coordinatenlijst))
(define (dimension wvect)
  (vector-length wvect))
(define (coordinate nummer wvect)
  (if (or (< nummer 1) (> nummer (dimension wvect)))
      (error "coordinate-error")
      (vector-ref wvect (- nummer 1))))
;de interface
;   (v+ wvect1 wvect2)
;   (v- wvect1 wvect2)
;   (v. wvect1 wvect2)
;vectore met verschillende dimensie kunnen niet opgeteld, afgetrokken of
;geinprodukt worden...
;dan nu de definitie van een hulp-procedure die kijkt of de twee vectoren
;wel dezelfde dimensie hebben
(define (same-dimension wvect1 wvect2)
  (= (dimension wvect1) (dimension wvect2)))
;je mag hier geen gebruik meer maken van de kennis dat je met een lijst
;of met een vector werkt...
;om nadien sneller te werken wordt hier een procedure aux gedefinieerd
;deze procedure combineert steeds twee overeenkomstige coordinaten uit
;de vector en propt ze in een nieuwe vector.
(define (aux combiner wvect1 wvect2)
  (define (coordinatenlijst)
    (define (iter coordinatenummer acclst)
      (if (= coordinatenummer 0)
          acclst
          (iter
            (- coordinatenummer 1)
            (cons (combiner (coordinate coordinatenummer wvect1)
                            (coordinate coordinatenummer wvect2)) acclst))))
    (iter (dimension wvect1) '()))
  (if (same-dimension wvect1 wvect2)
      (make-w-vector (coordinatenlijst))
      (error "verschillende dimensie")))
(define (v+ wvect1 wvect2)
  (aux + wvect1 wvect2))
(define (v- wvect1 wvect2)
  (aux - wvect1 wvect2))
(define (v. wvect1 wvect2)
  (aux * wvect1 wvect2))
;je ziet dat deze drie laatste drie procedures zeer kort zijn. Dit komt omdat
;er steeds aux gebruikt wordt. Dit is het voordeel waarover sprake is in de
;opgave...