> Try using: (require 'cl-lib) Hmm... I think it has issues and inconsistency with old behavior, however I can not clearly remember why I don't like cl-labels. One reason is that it will not work in old emacses and if I remember correctly in files without -*- lexical-binding: t -*- header. M-: (require 'cl-lib) M-: (defmacro alambda (args &rest body) `(cl-labels ((self ,args ,@body)) #'self)) M-: (setq lexical-binding t) M-: (funcall (alambda (a b) (cl-flet ((a (b c) (> b c))) (let ((> a)) (if (a > b) (message "%s %s %s" a b (symbol-function 'self)) (self b a))))) 1 2)