composing a number of functions. Every function, but the last one, must take exaclty one argument.
(defun compose (&rest fns)
"composing a number of functions.
Every function, but the last one, must take exaclty one argument."
(if fns
(let ((fn1 (last1 fns))
(fns (butlast fns)))
(lambda (&rest args)
(reduce #'funcall fns
:from-end t
:initial-value (apply fn1 args))))
#'identity))Source Context