(defclass* rectangle () (height width)) (defclass* circle () (radius)) (defmethod* area ((x rectangle)) (* (slot-value* x 'height) (slot-value* x 'width))) (defmethod* area ((x circle)) (* pi (expt (slot-value* x 'radius) 2)))という定義を行って,
> (setq c (make-instance* 'circle)) #<CLOSURE :LAMBDA (SELF X &REST ARGS) (LET ((LOCAL-VAR-FUNCTION (GETHASH X VAR-STORE))) (IF LOCAL-VAR-FUNCTION (APPLY LOCAL-VAR-FUNCTION ARGS) (LET ((METHOD (FIND-METHOD* X 'CIRCLE))) (IF METHOD (APPLY METHOD (CONS SELF ARGS)) (ERROR "~a undefined method for class ~a" X 'CIRCLE)))))> > (setq r (make-instance* 'rectangle)) #<CLOSURE :LAMBDA (SELF X &REST ARGS) (LET ((LOCAL-VAR-FUNCTION (GETHASH X VAR-STORE))) (IF LOCAL-VAR-FUNCTION (APPLY LOCAL-VAR-FUNCTION ARGS) (LET ((METHOD (FIND-METHOD* X 'RECTANGLE))) (IF METHOD (APPLY METHOD (CONS SELF ARGS)) (ERROR "~a undefined method for class ~a" X 'RECTANGLE)))))> > (setf (height r) 2 (width r) 3) 3 > (setf (radius c) 3) 3 > (radius c) 3 > (slot-value* c 'radius) 3 > (area c) 28.274333882308139147L0 > (area r) 6