In r7rs, I think most of the output functions return an unspecified value, as does vector-set! (I think...), s7_unspecified or #<unspecified>, but this is dumb. s7 normally tries to return a value for the reason you mentioned, so vector-set! returns the value, and output procedures (like display) return the thing output.