(defmacro lambda (variable expression) (labels ((lambda-generate (variable expression x) (loop for y in expression if (eq y variable) collect x else if (and (listp y) (eq (car y) 'lambda) (not (eq (cadr y) variable))) collect `(lambda ,(cadr y) ,(lambda-generate variable (caddr y) x)) else collect y))) (cons 'primitive-lambda (lambda-generate variable expression (gensym)))))