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
On Sun, 18 Jan 2009 08:17:42 -0800, Rock wrote:
> 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?
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
On Jan 18, 5:29 pm, Tamas K Papp <······@gmail.com> wrote:
> On Sun, 18 Jan 2009 08:17:42 -0800, Rock wrote:
> > 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?
>
> 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
Yes, that's an interesting possibility. Thank you.
Tamas K Papp <······@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 <····@rpw3.org>
627 26th Avenue <URL:http://rpw3.org/>
San Mateo, CA 94403 (650)572-2607