[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

CALL-NEXT-METHOD example



    Date: Thu, 5 Nov 87 18:16 PST
    From: Gregor.pa@Xerox.COM


    Here is an example which could be used for the call-next-method section.
    Its somewhat of a silly example, but I believe it captures several
    important points about call-next-method.  Namely its basic behavior, how
    it defaults the argument when no arguments are passed, that it is a true
    lexical function, and that it is possible to pass it arguments,


    (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 '(a b c)) ==> (A B C)

    ;;; 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))
    -------

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.