(define-compiler-macro rcurry (function &rest arguments) (let ((rcurries (make-gensym-list (length arguments) "RCURRY")) (fun (gensym "FUN"))) `(let ((,fun (ensure-function ,function)) ,@(mapcar #'list rcurries arguments)) (lambda (&rest more) (declare (dynamic-extent more)) (multiple-value-call ,fun (values-list more) ,@rcurries)))))