This is an alternate form of validating an argument that doesn't modify the args list.
For 25 years, I had assumed that modifying the list was useful, like maybe it sped
things up the next time, but the argument is list recreated each time a primitive
is called, so changing it does nothing. I speculate that the reason the argument
list is modified is a cheap form of memory management for any new/converted arguments.
The code base will be easier to undersatnd if doesn't modify the argument list for
non-obvious reasons. This code base will also be easier to understand if it relies
on the return value from functions instead of calling functions that sometimes modify
their arguments.