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