Clean up player-{pay,receive}
Clean up the implementation of player-pay and player-receive by: - Single-clause early-error `if` for errors - use `incf`/`decf` instead of `setf`.
This commit is contained in:
@@ -67,28 +67,19 @@
|
|||||||
|
|
||||||
(fn player-pay (id amount players) (-> (fixnum fixnum players) players)
|
(fn player-pay (id amount players) (-> (fixnum fixnum players) players)
|
||||||
(let ((p (assoc id players)))
|
(let ((p (assoc id players)))
|
||||||
(cond
|
(if (not (typep p 'player))
|
||||||
((not (typep p 'player))
|
(error 'error-player-nonexistent :id id))
|
||||||
(error 'error-player-nonexistent
|
(if (not (player-can-bet? amount p))
|
||||||
:id id))
|
(error 'error-player-broke
|
||||||
((not (player-can-bet? amount p))
|
:id id
|
||||||
(error 'error-player-broke
|
:balance (player-balance p)
|
||||||
:id id
|
:required amount))
|
||||||
:balance (player-balance p)
|
(decf (cadr (assoc id players)) amount))
|
||||||
:required amount))
|
players)
|
||||||
(t
|
|
||||||
(destructuring-bind (id balance cards) p
|
|
||||||
(setf (cdr (assoc id players))
|
|
||||||
(list (- balance amount) cards)))))
|
|
||||||
players))
|
|
||||||
|
|
||||||
(fn player-receive (id amount players)
|
(fn player-receive (id amount players) (-> (fixnum fixnum players) players)
|
||||||
(-> (fixnum fixnum players) players)
|
|
||||||
(let ((p (assoc id players)))
|
(let ((p (assoc id players)))
|
||||||
(if (not (typep p 'player))
|
(if (not (typep p 'player))
|
||||||
(error 'error-player-nonexistent
|
(error 'error-player-nonexistent :id id))
|
||||||
:id id))
|
(incf (cadr (assoc id players)) amount)
|
||||||
(destructuring-bind (id balance cards) p
|
|
||||||
(setf (cdr (assoc id players))
|
|
||||||
(list (+ balance amount) cards)))
|
|
||||||
players))
|
players))
|
||||||
|
|||||||
Reference in New Issue
Block a user