id summary reporter owner description type status priority milestone component version resolution keywords cc difficulty 1703 Arguments being passed to procedure incorrectly Jakob L. Kreuze sjamaan "Here is the offending part of a program I have been writing. {{{ (define (reduce proc list init) (define (reduce-iter list result) (if (null? list) result (reduce-iter (cdr list) (proc result (car list))))) (reduce-iter list init)) (define-record-type (make-vec3 x y z) vec3? (x vec3-x) (y vec3-y) (z vec3-z)) ;; Macro for destructuring a vec3. (define-syntax vec3-bind (syntax-rules () ((vec3-bind ((names vec) ...) body) (let-values ((names (values (vec3-x vec) (vec3-y vec) (vec3-z vec))) ...) body)))) (define (vec3- . vecs) ""Return the difference of VECS, as in vector space subtraction."" (define (sub u v) (vec3-bind (((x1 y1 z1) u) ((x2 y2 z2) v)) (make-vec3 (- x1 x2) (- y1 y2) (- z1 z2)))) (if (zero? (length vecs)) (make-vec3 0 0 0) (reduce sub (cdr vecs) (car vecs)))) (vec3- (make-vec3 1.00 1.00 1.00) (make-vec3 1.00 1.00 1.00) (make-vec3 1.00 1.00 1.00)) }}} This runs without error on Version 4.13.0 (rev 68eeaaef), but on Version 5.2.0 (rev 317468e4), I get the following runtime error. {{{ Error: (vec3-x) bad argument type - not a structure of the required type # Call history: r7rs-raytracer.scm:35: make-vec3 r7rs-raytracer.scm:36: make-vec3 r7rs-raytracer.scm:37: make-vec3 r7rs-raytracer.scm:35: vec3- r7rs-raytracer.scm:33: reduce r7rs-raytracer.scm:6: reduce-iter r7rs-raytracer.scm:5: proc r7rs-raytracer.scm:29: ##sys#call-with-values r7rs-raytracer.scm:29: vec3-x <-- }}} I could not build the master branch, so I was unable to see if this has been resolved. I suspect the arguments are being passed in the wrong order to 'reduce', somehow. This error only occurs if the number of arguments to vec3- is greater than 2." defect closed major 5.3 compiler 5.2.0 fixed hard