On Sat, Jun 25, 2022 at 11:21:20PM +0300, Jean Louis wrote: > > I would like to invoke logging for specific functions automatically, > without specifying what to log, and my function should know which > function invoked it. This is not completely trivial. In Lisp, a function has no name. It is a first-class object which can be bound to (the function slot) of a symbol (or to that of two, three... symbols). It's like the value 42. Many variables can be bound to that. Or none. What name has (lambda (x) (if (= (mod x 2) 1) (+ (* 3 x) 1) (/ x 2)))? None (yet?). Try this: (setf (symbol-function 'foo) (lambda (x) (+ x 1))) Now: (foo 13) => 14 So that function that adds one to its argument is now arguably called foo. But: (setf (symbol-function 'bar) (symbol-function 'foo)) Then: (bar 14) => 15 ...it can be called bar at the same time. Well, I can be called two names too, can't I? See 13.3 "Naming a function" and 9.1 "Symbol Components" in our beloved Emacs Lisp manual for all the gory details. Now to the interesting question: how do debuggers pull it off? Cheers -- t