Nikodemus Siivola nikodemus@random-state.net writes:
Never one to give up, I note that review cycle 2 is still on, and SWITCH &co are still on the operating table...
Aside from the docstrings -- which are quick to fix once the semantics are settled-- I think the main questions are:
Should they evaluate clause keys or not?
If they evaluate keys, can one specify multiple keys per clause?
:KEY argument currently makes no sense, IMO, since (switch ((foo-bar
foo)) ...) is more convenient than (switch (foo :key #'foo-bar) ...).
- :TEST and :KEY meaning. What does (defun feh (equal) (switch (*foo*
:test equal) ...)) mean?
My current thinking is that evaluating keyforms is OK, as it makes it easier to write stuff like
(switch (foo :test #'equal) (constant1 ...) (constant2 ...))
I'd be happy to live with non-evaluating keys as well, though.
I don't have time right now to consider anything else this issue.
In past, I suggested to have both: Zetalisp contained a SELECT macro which was pretty much like SWITCH with evaluating keys, iirc. Hence I suggest to have
SWITCH, which does _not_ evaluate the keys (because of its C connotations)
and
SELECT which does.
-T.