Continuing the series of less commonly-encountered Lisp features, multiple-value-call. This function is much like funcall, but over multiple values. If functions returning multiple values is unfamiliar to you, check the brief digression on the topic of values in this earlier post.
When funcall is invoked, if any of the arguments are forms, those forms are evaluated and the primary value is used in the function invocation. Any additional values are discarded. The multiple-value-call special operator captures all values returned by those forms and inserts them, in order, in the argument list before calling the function. This is best illustrated with a simple example:
CL-USER> (funcall '+ (values 1 10) (values 1 20)) 2 CL-USER> (funcall 'list (values 1 10) (values 1 20)) (1 1) CL-USER> (multiple-value-call '+ (values 1 10) (values 1 20)) 32 CL-USER> (multiple-value-call 'list (values 1 10) (values 1 20)) (1 10 1 20)