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