help-gnu-emacs
[Top][All Lists]
Advanced

[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

Attachment: signature.asc
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]