[cdr-discuss] Three RFCs
Ingvar
ingvar at hexapodia.net
Tue Mar 18 12:12:08 UTC 2008
Gary King wrote
> Pascal Constanza wrote:
> >> 1. Support a :TEST arg for (E)CASE.
> >
> > I'm not sure what this buys you over a regular cond. Case primarily
> > exists for efficiency, no?
>
> Hi Pascal, I see your point _but_ there is also something to be said
> for efficiency of human code reading and code writing, no? I'd say
> that case variants let the reader know that all of the tests are of
> the form "this" is the same as "that" for some notion of "same as" and
> various "that"s.
>
> (case <this>
> (that-1 ...)
> (that-2 ...)
> ...)
>
> whereas cond is saying, do an arbitrary test for each possible branch...
>
> This may not be enough to argue for adding to / extending case...
I have mixed feelings about this. On one hand, it is a handy idiom. On the
other hand, CASE (and ECASE and maybe, to some extent TYPECASE) are by now
well-ingrained as efficient idioms.
I would personally be happier if there was an "almost CASE" with user-
controllable test, whose name didn't actually contain "CASE" at all.
Unfortunately, I don't think SWITCH is a good name, either. I notice that I
can't see a SELECT in the HyperSpec, maybe that would be a neutral-enough name
for this sort of construct?
Something along the lines of:
(select (form &optional (test #'eql))
...)
With the forms following being similar to the ones used in CASE/ECASE?
It is a handy idiom, in that respect and I have whipped up some in the past
(though, I must admit, special-purpose ones, each time, rather than a general
one).
//Ingvar
More information about the cdr-discuss
mailing list