m = 2i × 3jSuppose we had (exponent-of-in b m), which returns the highest power of b that divides evenly into m.
Then
(size-of-pile m 1)
can be computed by
(exponent-of-in 2 m).
and
(size-of-pile m 2)
can be computed by
(exponent-of-in 3 m).
The selector is now straightforward:
(define size-of-pile
(lambda (game-state pile-number)
(if (= pile-number 1)
(exponent-of-in 2 game-state)
(exponent-of-in 3 game-state))))