This is consistent with how other procedures work.
I had thought the code would use validate_argument before entering the
parsing loop, but I didn't like the idea of making two passes over
the list. Instead, the code optimistically collects the output and,
on error, cleans up and gets a whole new input.
Overall, the code didn't turn out clean as I had hoped. Still, I
prefer the new behavior, so I'm going to keep it, and probably apply
similar code to BUTFIRSTS.