all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* when you gotta have a variable value for a symbol name
@ 2014-07-23 21:37 Buchs, Kevin J.
  2014-07-23 22:02 ` Drew Adams
       [not found] ` <mailman.5936.1406152985.1147.help-gnu-emacs@gnu.org>
  0 siblings, 2 replies; 7+ messages in thread
From: Buchs, Kevin J. @ 2014-07-23 21:37 UTC (permalink / raw
  To: help-gnu-emacs

I want to evaluate (kmacro-name-last-macro variable), where I want the 
value of "variable" passed as the symbol name. Despite years of trying, 
I don't think I ever really conceptually "got" the distinction between 
symbols and variables and that seems to be critical here. I'm working 
with the code below, but it is not suceeding in naming the macros (no 
error messages, however). Of course (kmacro-name-last-macro 'my-macro) 
works just fine.

-- 
Kevin Buchs   Research Computer Services   Phone: 507-538-5459
Mayo Clinic   200 1st. St SW   Rochester, MN 55905
http://mayoclinic.org  http://facebook.com/MayoClinic  http://youtube.com/MayoClinic  http://twitter.com/MayoClinic

(defun name-my-macro-sequentially ()
   "Names the last recorded macro as my-macro#, where # is a number sequentially incremented"
    (interactive)
    (unless (boundp 'my-macro-counter) (setq my-macro-counter 0))
    (setq my-macro-counter (1+ my-macro-counter))
    (let ((macro-name (format "my-macro-%d" my-macro-counter)))
       (kmacro-name-last-macro (make-symbol macro-name))
       (message "named keyboard macro %s" macro-name)))




^ permalink raw reply	[flat|nested] 7+ messages in thread

* RE: when you gotta have a variable value for a symbol name
  2014-07-23 21:37 Buchs, Kevin J.
@ 2014-07-23 22:02 ` Drew Adams
       [not found]   ` <(message>
  2014-07-24 21:57   ` Robert Thorpe
       [not found] ` <mailman.5936.1406152985.1147.help-gnu-emacs@gnu.org>
  1 sibling, 2 replies; 7+ messages in thread
From: Drew Adams @ 2014-07-23 22:02 UTC (permalink / raw
  To: Buchs, Kevin J., help-gnu-emacs

> I want to evaluate (kmacro-name-last-macro variable), where I want the
> value of "variable" passed as the symbol name. Despite years of trying,
> I don't think I ever really conceptually "got" the distinction between
> symbols and variables and that seems to be critical here. I'm working
> with the code below, but it is not suceeding in naming the macros (no
> error messages, however). Of course (kmacro-name-last-macro 'my-macro)
> works just fine.
>
> (defun name-my-macro-sequentially ()
>    "Names the last recorded macro as my-macro#, where # is a number
> sequentially incremented"
>     (interactive)
>     (unless (boundp 'my-macro-counter) (setq my-macro-counter 0))
>     (setq my-macro-counter (1+ my-macro-counter))
>     (let ((macro-name (format "my-macro-%d" my-macro-counter)))
>        (kmacro-name-last-macro (make-symbol macro-name))
                                  ^^^^^^^^^^^
>        (message "named keyboard macro %s" macro-name)))

Change `make-symbol' to `intern' and you're good to go.  `make-symbol'
returns an uninterned symbol.



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: when you gotta have a variable value for a symbol name
       [not found] ` <mailman.5936.1406152985.1147.help-gnu-emacs@gnu.org>
@ 2014-07-23 22:12   ` Pascal J. Bourguignon
  0 siblings, 0 replies; 7+ messages in thread
From: Pascal J. Bourguignon @ 2014-07-23 22:12 UTC (permalink / raw
  To: help-gnu-emacs

Drew Adams <drew.adams@oracle.com> writes:

>> I want to evaluate (kmacro-name-last-macro variable), where I want the
>> value of "variable" passed as the symbol name. Despite years of trying,
>> I don't think I ever really conceptually "got" the distinction between
>> symbols and variables and that seems to be critical here. I'm working
>> with the code below, but it is not suceeding in naming the macros (no
>> error messages, however). Of course (kmacro-name-last-macro 'my-macro)
>> works just fine.
>>
>> (defun name-my-macro-sequentially ()
>>    "Names the last recorded macro as my-macro#, where # is a number
>> sequentially incremented"
>>     (interactive)
>>     (unless (boundp 'my-macro-counter) (setq my-macro-counter 0))
>>     (setq my-macro-counter (1+ my-macro-counter))
>>     (let ((macro-name (format "my-macro-%d" my-macro-counter)))
>>        (kmacro-name-last-macro (make-symbol macro-name))
>                                   ^^^^^^^^^^^
>>        (message "named keyboard macro %s" macro-name)))
>
> Change `make-symbol' to `intern' and you're good to go.  `make-symbol'
> returns an uninterned symbol.

And use:

   (defvar my-macro-counter 0)
   (defun …
    )

instead of:

   (defun …
      …
      (unless (boundp 'my-macro-counter) (setq my-macro-counter 0))
      …)



-- 
__Pascal Bourguignon__                 http://www.informatimago.com/
“The factory of the future will have only two employees, a man and a
dog. The man will be there to feed the dog. The dog will be there to
keep the man from touching the equipment.” -- Carl Bass CEO Autodesk


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: when you gotta have a variable value for a symbol name
       [not found] <mailman.5935.1406151450.1147.help-gnu-emacs@gnu.org>
@ 2014-07-23 23:24 ` Emanuel Berg
  0 siblings, 0 replies; 7+ messages in thread
From: Emanuel Berg @ 2014-07-23 23:24 UTC (permalink / raw
  To: help-gnu-emacs

"Buchs, Kevin J." <buchs.kevin@mayo.edu> writes:

> I want to evaluate (kmacro-name-last-macro variable),
> where I want the value of "variable" passed as the
> symbol name. Despite years of trying, I don't think I
> ever really conceptually "got" the distinction
> between symbols and variables and that seems to be
> critical here.

Good question. In books on programming when they
mention Lisp in one paragraph they always say it came
out of a crazy mind. No, it came out of the push for AI
in the US in the 50s (probably with the cold war in
mind and everything). I thought that "AI" referred to
the data/code blend that can make a function rearrange
another function like any other list of data, perhaps
swapping a pair of operands around a binary operator
and reinsert the modified function in a pool of
competing functions, to see what first morphs into a
function that can solve some task... And more, the Lisp
reliance on the list data structure, that can be
nested, and searched, as so much of the AI applications
revolve around searching trees according to probability
calculations... But they (the books) also usually say
Lisp is about "symbolic manipulation". Is that
literally manipulating symbols?  Drawing on the
dynamic/lexical scope discussion the other day, symbols
would then be dynamic scope as the function would act
on the existing symbol. Variables would be the lexical
scope or the traditional programming approach of using
variables to build programs (and not the other way
around, to build programs to juggle around with
symbols). I guess almost all ordinary Elisping isn't
anything uncommon like that, just to have Emacs
automatize and do things certain ways, nothing fancy
from a theory/science point of view.

--
underground experts united


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: when you gotta have a variable value for a symbol name
  2014-07-23 22:02 ` Drew Adams
       [not found]   ` <(message>
@ 2014-07-24 21:57   ` Robert Thorpe
  2014-07-25  0:06     ` Drew Adams
  1 sibling, 1 reply; 7+ messages in thread
From: Robert Thorpe @ 2014-07-24 21:57 UTC (permalink / raw
  To: Drew Adams; +Cc: buchs.kevin, help-gnu-emacs

Drew Adams <drew.adams@oracle.com> writes:

>> I want to evaluate (kmacro-name-last-macro variable), where I want the
>> value of "variable" passed as the symbol name. Despite years of trying,
>> I don't think I ever really conceptually "got" the distinction between
>> symbols and variables and that seems to be critical here. I'm working
>> with the code below, but it is not suceeding in naming the macros (no
>> error messages, however). Of course (kmacro-name-last-macro 'my-macro)
>> works just fine.

Lisp is like the insides of a compiler.  There's a big hash-map, the
obarray, which is the symbol-table.  It stores strings along with some
information about them.  These strings are "symbols".  There are three
pieces of information: the symbol's value as a variable, the symbols
value as a function and a property list.  An interned symbol is one that
is an entry in the obarray (there can be multiple obarrays though that
feature isn't used much).  An uninterned symbol is one that sits by
itself, it has the same parts as usual: string, function entry, variable
entry and plist, but it's not attached to an obarray.  If we have a
function call: (foo bar 'baz) then lisp treats each of these symbols
differently.  It finds the function slot for foo because that's the
first symbol, it finds the variable slot for bar because it's not first.
Finally, 'baz returns the symbol itself.  To be more careful: (quote
baz) returns a list containing the symbol, which evaluates to the
symbol.

(info "(elisp) Symbols")

BR,
Robert Thorpe



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: when you gotta have a variable value for a symbol name
       [not found] <mailman.5972.1406239064.1147.help-gnu-emacs@gnu.org>
@ 2014-07-24 22:22 ` Emanuel Berg
  0 siblings, 0 replies; 7+ messages in thread
From: Emanuel Berg @ 2014-07-24 22:22 UTC (permalink / raw
  To: help-gnu-emacs

Robert Thorpe <rt@robertthorpeconsulting.com> writes:

> An uninterned symbol is one that sits by itself, it
> has the same parts as usual: string, function entry,
> variable entry and plist, but it's not attached to an
> obarray.

Do you use uninterned symbols in macros so they won't
collide once expanded or what is the reason not to put
symbols in the obarray?

-- 
underground experts united


^ permalink raw reply	[flat|nested] 7+ messages in thread

* RE: when you gotta have a variable value for a symbol name
  2014-07-24 21:57   ` Robert Thorpe
@ 2014-07-25  0:06     ` Drew Adams
  0 siblings, 0 replies; 7+ messages in thread
From: Drew Adams @ 2014-07-25  0:06 UTC (permalink / raw
  To: Robert Thorpe; +Cc: buchs.kevin, help-gnu-emacs

> Drew Adams <drew.adams@oracle.com> writes:
...

Quoted text, none of which I wrote...



^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2014-07-25  0:06 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <mailman.5935.1406151450.1147.help-gnu-emacs@gnu.org>
2014-07-23 23:24 ` when you gotta have a variable value for a symbol name Emanuel Berg
     [not found] <mailman.5972.1406239064.1147.help-gnu-emacs@gnu.org>
2014-07-24 22:22 ` Emanuel Berg
2014-07-23 21:37 Buchs, Kevin J.
2014-07-23 22:02 ` Drew Adams
     [not found]   ` <(message>
     [not found]     ` <from>
     [not found]       ` <Drew>
     [not found]         ` <Adams>
     [not found]           ` <on>
     [not found]             ` <Wed>
     [not found]               ` <23>
     [not found]                 ` <Jul>
     [not found]                   ` <2014>
     [not found]                     ` <15:02:38>
     [not found]                       ` <-0700>
2014-07-24 21:57   ` Robert Thorpe
2014-07-25  0:06     ` Drew Adams
     [not found] ` <mailman.5936.1406152985.1147.help-gnu-emacs@gnu.org>
2014-07-23 22:12   ` Pascal J. Bourguignon

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.