The Data Abstraction Principle:
Don't use constructors and selectors in ways that assume anything about
the data representation.
For example, don't do any of these:
(size-of-pile (* 6 6) 1) Assumes game state is represented as a number
(size-of-pile sqrt 1) Assumes game state is represented as a procedure
(sqrt (make-game-state 3 6)) Assumes game state is represented as a number
((make-game-state 3 6) 7) Assumes game state is represented as a procedure