(defclass bank-account ()
((dollars :accessor dollars
:initform 0
:initarg :dollars)))
(defmethod set-dollars ((self bank-account) (x number))
(setf (dollars self) x))
(defmethod deposit ((self bank-account) (x number))
(set-dollars self (+ (dollars self) x)))
(defmethod withdraw ((self bank-account) (x number))
(set-dollars self (max 0 (- (dollars self) x))))
(setq my-account (make-instance 'bank-account :dollars 200))
(dollars my-account)
==> 200
(deposit my-account 50)
==> 250
(withdraw my-account 100)
==> 150
(withdraw my-account 200)
==> 0
(defclass stock-account (bank-account)
((num-shares :accessor num-shares
:initform 0
:initarg :num-shares)
(price-per-share :accessor price-per-share
:initform 30
:initarg :price-per-share)))
(defmethod set-num-shares ((self stock-account) (x number))
(setf (num-shares self) x))
(defmethod set-price-per-share ((self stock-account) (x number))
(setf (price-per-share self) x))
(defmethod set-dollars ((self stock-account) (x number))
(set-num-shares self (/ (float x) (price-per-share self)))
(dollars self))
(defmethod dollars ((self stock-account))
(* (num-shares self) (price-per-share self)))
(setq my-stock (make-instance 'stock-account :num-shares 10))
(dollars my-stock)
==> 300
(set-dollars my-stock 600)
==> 600.0
(deposit my-stock 60)
==> 660.0
(num-shares my-stock)
==> 22.0
(withdraw my-stock 120)
==> 540.0
(num-shares my-stock)
==> 18.0--sumimこのページを編集 (2604 bytes)
| 以下の 3 ページから参照されています。 |
This page has been visited 3800 times.