;;; srfi-17 setter for single element in a matrix -- this works (define-method ((setter elem) (mat ) (i ) (j ) val) (let ((idx (+ i (vector-ref (index mat) j)))) (f64vector-set! (data mat) idx val))) ;;; simple setter to change some specified column to val -- this works (define (column-set! mat col val) (if (not (= (f64vector-length val) (nrow mat))) (error "val not same length as matrix columns") (for-each (lambda (i) (set! (elem mat i col) (f64vector-ref val i))) (iota (f64vector-length val))))) ;;; srfi-17 setter for the column -- this does not work, returns the matrix but ;;; does not have side effects (define-method ((setter column) (mat ) (col ) val) (if (not (= (f64vector-length val) (nrow mat))) (error "val not same length as matrix columns") (for-each (lambda (i) (set! (elem mat i col) (f64vector-ref val i))) (iota (f64vector-length val))))) ;;; Simple example ;;; define matrix (define X (matrix '#f64(1 2 3 4 1 1 1 1 3 4 5 6 5 6 7 8) 4)) ;;; replace column 2 with new values (set! (column X 2) (f64vector 1 2 3 4))