Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

A defvars macro

3 views
Skip to first unread message

Rock

unread,
Jan 18, 2009, 11:17:42 AM1/18/09
to
I wrote a very simple little macro:

(defmacro defvars (names values)
`(progn
,@(loop for name in names for value in values
collect `(defvar ,name ,value))
NIL))

that's supposed to allow me to do something like this:

(defvars (*a* *b*) ((sin 1) (complex 3 4)))

Does that look ok or can it be improved?

Thanks.

Rock

Tamas K Papp

unread,
Jan 18, 2009, 11:29:34 AM1/18/09
to

If it does what you want, than I guess it is OK. I would make it
parse pairs though, eg

(defvars *a* (sin 1)
*b* (complex 3 4))

because if you have many arguments, it might be difficult to follow
what goes where with the original syntax (at least for me). Cf the
syntax of setf.

Tamas

Rock

unread,
Jan 18, 2009, 11:44:21 AM1/18/09
to

Yes, that's an interesting possibility. Thank you.

Rob Warnock

unread,
Jan 18, 2009, 9:21:18 PM1/18/09
to
Tamas K Papp <tkp...@gmail.com> wrote:
+---------------

| Rock wrote:
| > I wrote a very simple little macro:
...

| > that's supposed to allow me to do something like this:
| > (defvars (*a* *b*) ((sin 1) (complex 3 4)))
...

| If it does what you want, than I guess it is OK. I would make it
| parse pairs though, eg
| (defvars *a* (sin 1)
| *b* (complex 3 4))
+---------------

Where are you going to put the documentation strings?
You'd need something like this to cover all the cases:

(defvars (*x*) ; No initial value.
(*a* (sin 1)) ; A value, but no doc string.
(*b* (complex 3 4))) "A point on the plane." ; Both.

And given that, I really don't see any advantage over the default:

(defvar *x*) ; No initial value.
(defvar *a* (sin 1)) ; A value, but no doc string.
(defvar *b* (complex 3 4)) "A point on the plane." ; Both.


-Rob

-----
Rob Warnock <rp...@rpw3.org>
627 26th Avenue <URL:http://rpw3.org/>
San Mateo, CA 94403 (650)572-2607

0 new messages