(eval-when-compile (require 'cl)) ;; for `lexical-let' macro (defun compose (f g) (lexical-let ((f f) (g g)) (lambda (x) (funcall f (funcall g x))))) (let ((func (compose '1+ '1+))) (funcall func 5)) => 7