[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
CALL-NEXT-METHOD example
- To: David A. Moon <Moon@STONY-BROOK.SCRC.Symbolics.COM>
- Subject: CALL-NEXT-METHOD example
- From: Gregor.pa@Xerox.COM
- Date: Fri, 6 Nov 87 11:06 PST
- Cc: Gregor.pa@Xerox.COM, LGD@SAIL.STANFORD.EDU, Common-Lisp-Object-System@SAIL.STANFORD.EDU
- In-reply-to: <19871106032706.1.MOON@EUPHRATES.SCRC.Symbolics.COM>
- Line-fold: no
Date: Thu, 5 Nov 87 22:27 EST
From: David A. Moon <Moon@STONY-BROOK.SCRC.Symbolics.COM>
I don't see why (collect '(a b c)) isn't invalid for the same
reason. The list method becomes inapplicable in the recursive call.
Oops, your right. What I spaced on at the time was that I wasn't change
the applicable set of next methods so it was OK. Should that in fact be
the rule?
If not, here is a corrected example.
(defmethod collect (thing) thing)
(defmethod collect ((n number))
(let ((l ()))
(dotimes (i n)
(push (call-next-method) l))
(reverse l)))
(defmethod collect ((l list))
(mapcar #'call-next-method l))
(collect 5) ==> (5 5 5 5 5)
(collect '(() () ())) ==> (() () ())
;;; But note the following erroneous use of call-next-method.
;;; This example would cause an error to be signalled because
;;; the argument which is supplied to call-next-method would
;;; cause a different set of methods to be applicable.
(collect '(1 2 3))
-------