This is the mail archive of the guile@cygnus.com mailing list for the guile project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Mikael Djurfeldt <mdj@nada.kth.se> wrote:
>Maciej Stachowiak <mstachow@mit.edu> writes:
>> (lambda* (a b [c d] . e) '())
>
>This is neat, but to me it feels a bit un-schemey to introduce that
>kind of syntax. It feels as if it's a new syntactic idea to demarcate
>a part of the parameter list like that. (We don't want the Scheme
>syntax to evolve into something JAVA-like, do we? ;-)
It's been traditional in LISP dialects to mark optional arguments by
marking off part of the parameter list with some prefix, usually
&opt. I just have a slightly different way of marking them. Yes, it's
a new syntactic idea, but nothing other than procedure definitions and
the like needs a concept of optional values. Anyway, I hardly see how
treating some characters specially in a macro is "Java-like" - after
all, part of the fun of Scheme and Lisp in general is the ability to
extend the language.
>Personally I think I'd prefer to add some special form inside those
>"higher level" procedures which need optional arguments:
>
>(lambda (a b . args)
> (letarg ((c <c-default>)
> (d)
> e)
> (if (bound? d)
> ...)
> ...))
>
I noticed after I posted my stuff that the guile-scsh module already
has a macro in this latter style (let-optional), but unfortunately,
guile-scsh is not very usable yet, and I also like the more compact
syntax of my macros; it seems more readable to me to have both normal
and optional args in one place. I can always change the token that
separates the optional arguments to something more traditional, like
&opt or #{some character}optional if people really object to the
brackets.
- Maciej Stachowiak