The
(defmacro cl:multiple-value-call (function &rest exprs)
(let (args)
(dolist (expr exprs)
(setq cl:*multiple-values* nil)
(let* ((result (eval expr)))
(if cl:*multiple-values*
(dolist (rslt *rslt*) (push rslt args))
(push result args))))
(setq args (reverse args))
`(progn
(setq cl:*multiple-values* nil)
(apply ,function ',args)))
The
Before applying the function to the list of values the
Examples:
> (funcall #'+
(cl:values 1 2)
(cl:values 3 4))
4 ; (apply #'+ (1 3))
> (cl:multiple-value-call #'+
(cl:values 1 2)
(cl:values 3 4))
10 ; (apply #'+ (1 2 3 4))