Function COMPOSE
Syntax:
compose function* => composite-function
Arguments and Values:
function---a function designator.
composite-function---a function.
Description:
Composes its arguments into a single composite function. All its arguments are assumed to designate functions which take one argument and return one argument.
(funcall (compose f g) 42) is equivalent to (f (g 42)). Composition is right-associative.
Examples:
;; Just to illustrate order of operations (defun 2* (x) (* 2 x)) (funcall (compose #'1+ #'1+) 1) => 3 (funcall (compose '1+ '2*) 5) => 11 (funcall (compose #'1+ '2* '1+) 6) => 15
Notes:
If you're dealing with multiple arguments and return values, the same concept can be used. Here is some code that could be useful:
(defun mv-compose2 (f1 f2) (lambda (&rest args) (multiple-value-call f1 (apply f2 args)))) (defun mv-compose (&rest functions) (if functions (reduce #'mv-compose2 functions) #'values))