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:
2025-02-15 16:20:14 +00:00
parent 24b07f9166
commit dc94a396ec

View File

@@ -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))