This doesn't really have much to do with the original post, but why not just completely eliminate the problem and take a cue from Lisp by just allowing functions to return multiple values? yield could simply have the same effect as values does in CL.