(defmethod particle (:init () (setq pname nil mass 1 x-position 0 y-position 0 x-speed 0 y-speed 0 x-acceleration (car *gravity*) y-acceleration (cadr *gravity*)) self) (pname () pname) (mass () mass) (x-position () x-position) (y-position () y-position) (x-speed () x-speed) (y-speed () y-speed) (x-acceleration () x-acceleration) (y-acceleration () y-acceleration) (set-pname (v) (setq pname v)) (set-mass (v) (setq mass v)) (set-x-position (v) (setq x-position v)) (set-y-position (v) (setq y-position v)) (set-x-speed (v) (setq x-speed v)) (set-y-speed (v) (setq y-speed v)) (set-x-acceleration (v) (setq x-acceleration v)) (set-y-acceleration (v) (setq y-acceleration v)) (position-of () (list (send self 'x-position) (send self 'y-position))) (velocity-of () (list (send self 'x-speed) (send self 'y-speed))) (acceleration-of () (list (send self 'x-acceleration) (send self 'y-acceleration))) (set-position (x y) (send self 'set-x-position x) (send self 'set-y-position y)) (set-velocity (x y) (send self 'set-x-speed x) (send self 'set-y-speed y)) (new-position () (send self 'set-x-position (+ (send self 'x-position) (send self 'x-speed))) (send self 'set-y-position (+ (send self 'y-position) (send self 'y-speed)))) (new-velocity () (send self 'set-x-speed (+ (send self 'x-speed) (send self 'x-acceleration))) (send self 'set-y-speed (+ (send self 'y-speed) (send self 'y-acceleration)))) (status () (format t "~%~a's Pos:~a Vel:~a Acc:~a" (send self 'pname) (send self 'position-of) (send self 'velocity-of) (send self 'acceleration-of))) (crashed? () (and (> (send self 'y-position) *initial-height*) (not (< (send self 'x-position) 0)) (< (send self 'x-position) *asteroid-width*))) )pname,x-position,set-pnameなどがメソッド名である. そのメソッド名の次にはそのメソッドへの引数がくるとする. ロケットはパーティクルクラスのサブクラスなので, パーティクルクラスのメソッドをすべて継承する. そのため,ロケットのメソッドは以下のように ロケットに特有のメソッドのみの定義となる.
(defmethod rocket (:init () (setq motor-force '(0 0)) self) (set-motor-force (v) (setq motor-force v)) (motor-force () motor-force) (set-motor (force) (send self 'set-motor-force force) (send self 'set-x-acceleration (+ (car *gravity*) (car force))) (send self 'set-y-acceleration (+ (cadr *gravity*) (cadr force)))) (status () (format t "~%~a's Pos:~a Vel:~a Acc:~a" (send self 'pname) (send self 'position-of) (send self 'velocity-of) (send self 'acceleration-of)) (format t " Motor:~a" (send self 'motor-force))) )