I'm trying to write a generalization of map that supports multiple return values:
(define (map-n n f ls . lss) (if (empty? ls) (apply values (build-list n (lambda _ '()))) (call-with-values (thunk (apply f (car ls) (map car lss))) (lambda vs (call-with-values (thunk (apply map-n n f (cdr ls) (map cdr lss))) (lambda lss (apply values (map cons vs lss)))))))) This version works fine, but, tediously, requires I specify how many return values. This is annoying, since surely the context knows how many values it expects: > (let/ec escape (let-values ([(a b c) (let/cc k (escape (procedure-arity k)))]) 'meow)) > (arity-at-least 0) Oh, I guess not. Well that's fine, because surely I can reflect on `f`'s result arity: > (procedure-result-arity (lambda (x) (values 'a 'b 'c))) > #f Welp. So, uh, can I haz a current-context-arity please? -- William J. Bowman -- You received this message because you are subscribed to the Google Groups "Racket Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to racket-users+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/racket-users/20200328002810.GN31619%40williamjbowman.com.