I don't understand define-method-combination
Lispworks appears to treat what I think should be a "short form" define-method-combination as a "long form". The Hyperspec says, regarding d-m-c short form: The short form syntax of define-method-combination is recognized when the second subform is a non-nil symbol or is not present. But this code gives me an error: (defun combine (&rest args) (format t "combine: ~S~%" args) args) (define-method-combination combine) (defgeneric foo (l) (:method-combination combine)) (defmethod foo combine ((l list)) (format t "l is ~S~%" l) l) (foo '(a list)) => Error: invalid-method-error in #<STANDARD-METHOD FOO (COMBINE) (LIST) 21D56ED3>, called with arguments ((A LIST)): This method has qualifiers which are invalid for method-combination-type COMBINE. 1 (abort) Return to level 0. 2 Return to top loop level 0. Type :b for backtrace, :c <option number> to proceed, or :? for other options CL-USER 2 : 1 > If I macroexpand the d-m-c call I get what looks like a "long form" expansion; note the COND with a single T clause that throws the error I got: (DSPEC:DEF (METHOD-COMBINATION COMBINE) (CLOS::LOAD-METHOD-COMBINATION 'COMBINE 'NIL #'(LAMBDA () (DECLARE) #'(LAMBDA (#:G5594 #:|methods-5593|) (LET () (LOOP CLOS::FOR #:|method-5592| CLOS::IN #:|methods-5593| CLOS::FOR #:|qualifiers-5591| = (METHOD-QUALIFIERS #:|method-5592|) DO (COND (T (INVALID-METHOD-ERROR #:|method-5592| "This method has qualifiers which are invalid for ~ method-combination-type ~S." 'COMBINE)))) (PROGN)))) :LOCATION (DSPEC:LOCATION))) By comparison if I macroexpand (define-method-combination combine :operator combine) I get what looks like a "short form" expansion: (DSPEC:DEF (DEFINE-METHOD-COMBINATION COMBINE) (CLOS::LOAD-SIMPLE-METHOD-COMBINATION 'COMBINE 'COMBINE 'NIL 'NIL (DSPEC:LOCATION))) (And, of course, if I *use* that code, then my example code above works.) Have I misunderstood the Hyperspec, or is something else going on? -- Larry Clapp