"Nikodemus Siivola" nikodemus@random-state.net writes:
Re. expanding into COND: I think the API is the important bit. If we are able to figure out that something else is more efficient, then we can expand into something else -- COND is an implementation detail.
It isn't about expanding into COND per se, but that the clause-keys are evaluated. Both behaviours are useful, but the name SWITCH connotes the non-evaluating behaviour, IMO. We could add another macro that works like SWITCH works now, but is called SELECT.
Here are the new (proposed) docstrings:
macro switch (&whole whole (keyform &key (test #'eql) key) &body clauses) "Conditionally executes one of the clauses, and returns its values. KEYFORM is first evaluated, and if KEY is given and non-null, it is used to extract a comparison value from the result of evaluating KEYFORM.
"KEYFORM is first evaluated, and if KEY is given and non-null (in which case it must evaluate to a function designator), it's applied to the result of evaluating KEYFORM, to extract the comparasion value. If KEY is not given, the result of evaluating KEYFORM itself is used as comparasion value."
"TEST must evaluate to a function designator of two arguments."
macro eswitch (&whole whole (keyform &key (test #'eql) key) &body clauses) "Conditionally executes one of the clauses, and returns its values. KEYFORM is first evaluated, and if KEY is given and non-null, it is used to extract a comparison value from the result of evaluating KEYFORM.
I think ESWITCH, and CSWITCH shouldn't repeat everything that already said in SWITCH, but should reference SWITCH, and explain how they differ, i.e.
"ESWITCH works exactly like SWITCH except if no clause matches, an error is signalled."
-T.