Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (defclass standard-point ()
- ((x :initform 0 :initarg :x)
- (y :initform 0 :initarg :y)))
- (defgeneric distance-origin (point))
- (defmethod distance-origin ((point1 standard-point))
- (when (and (slot-exists-p point1 'x) (slot-exists-p point1 'y))
- (sqrt (+ (expt (sb-mop:standard-instance-access point1 0) 2)
- (expt (sb-mop:standard-instance-access point1 1) 2)))))
- (defgeneric distance (point1 point2))
- (defmethod distance ((point1 null) (point2 null)))
- (defmethod distance ((point1 standard-point) point2)
- (when (and (slot-exists-p point1 'x) (slot-exists-p point1 'y))
- (sqrt (+ (expt (sb-mop:standard-instance-access point1 0) 2)
- (expt (sb-mop:standard-instance-access point1 1) 2)))))
- (defmethod distance (point1 (point2 standard-point))
- (when (and (slot-exists-p point2 'x) (slot-exists-p point2 'y))
- (sqrt (+ (expt (sb-mop:standard-instance-access point2 0) 2)
- (expt (sb-mop:standard-instance-access point2 1) 2)))))
- (defmethod distance ((point1 null) (point2 standard-point))
- (when (and (slot-exists-p point2 'x) (slot-exists-p point2 'y))
- (sqrt (+ (expt (sb-mop:standard-instance-access point2 0) 2)
- (expt (sb-mop:standard-instance-access point2 1) 2)))))
- (defmethod distance ((point1 standard-point) (point2 null))
- (when (and (slot-exists-p point1 'x) (slot-exists-p point1 'y))
- (sqrt (+ (expt (sb-mop:standard-instance-access point1 0) 2)
- (expt (sb-mop:standard-instance-access point1 1) 2)))))
- (defmethod distance ((point1 standard-point) (point2 standard-point))
- (when (and (slot-exists-p point1 'x) (slot-exists-p point1 'y)
- (slot-exists-p point2 'x) (slot-exists-p point2 'y))
- (sqrt (+ (expt (- (sb-mop:standard-instance-access point2 0) (sb-mop:standard-instance-access point1 0)) 2)
- (expt (- (sb-mop:standard-instance-access point2 1) (sb-mop:standard-instance-access point1 1)) 2)))))
- (defvar p1 (make-instance 'standard-point :x -3 :y 5))
- (defvar p2 (make-instance 'standard-point :x 7 :y -1))
- (defun test ()
- (distance p2 p1))
- * (test)
- 11.661903
- * (distance p1 nil)
- 5.8309517
- * (distance p1 0)
- 5.8309517
- * (distance nil p2)
- 7.071068
- * (distance 1 p2)
- 7.071068
- * (distance-origin p1)
- 5.8309517
- * (distance-origin p2)
- 7.071068
- *
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement