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


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