(import srfi-4) (foreign-declare " struct vec2 { double x, y; }; struct vec2 vec2_abs(struct vec2 a) { struct vec2 r = {a.x > 0 ? a.x : -a.x , a.y > 0 ? a.y : -a.y }; return r; } ") (define (vec2-abs v) (let ((result (make-f64vector 2))) ((foreign-lambda* void ((f64vector dest) (f64vector a)) "*((struct vec2*)dest) = vec2_abs(*((struct vec2*)a));") result v) result)) (print (vec2-abs (f64vector -1 2))) (print (vec2-abs (f64vector 1 2))) (print (vec2-abs (f64vector 1 -2)))