(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...