[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: How can function know its own name?
From: |
tomas |
Subject: |
Re: How can function know its own name? |
Date: |
Sun, 26 Jun 2022 07:46:24 +0200 |
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
signature.asc
Description: PGP signature